Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 划分一个表以真正受益的好的大小(行数)是多少?_Sql_Oracle_Partitioning_Database Partitioning - Fatal编程技术网

Sql 划分一个表以真正受益的好的大小(行数)是多少?

Sql 划分一个表以真正受益的好的大小(行数)是多少?,sql,oracle,partitioning,database-partitioning,Sql,Oracle,Partitioning,Database Partitioning,也就是说,如果我们有一张400万行的桌子 它有一个状态字段,可以采用以下值:工作,被阻止或正确工作 您是否会在一个只会更改一次的字段上进行分区(大多数情况下从到工作到正确工作)?您将创建多少个分区?表中的行数通常不是确定是否以及如何对表进行分区的重要指标 你想解决什么问题?您是否正在尝试提高查询性能?数据加载的性能?清除数据的性能 假设您正在尝试提高查询性能?您的所有查询是否在STATUS列上都有谓词?他们正在进行单行查找吗?还是希望查询扫描整个分区?分区中的绝对行数不是最有用的指标。您真正想要

也就是说,如果我们有一张400万行的桌子

它有一个
状态
字段,可以采用以下值:
工作
被阻止
正确工作


您是否会在一个只会更改一次的字段上进行分区(大多数情况下从到工作到正确工作)?您将创建多少个分区?

表中的行数通常不是确定是否以及如何对表进行分区的重要指标

你想解决什么问题?您是否正在尝试提高查询性能?数据加载的性能?清除数据的性能


假设您正在尝试提高查询性能?您的所有查询是否在
STATUS
列上都有谓词?他们正在进行单行查找吗?还是希望查询扫描整个分区?

分区中的绝对行数不是最有用的指标。您真正想要的是一个列,它随着表的增长而稳定,并提供分区的潜在好处。它们是:可用性、表空间管理和性能

例如,示例列有三个值。这意味着您可以有三个分区,这意味着您可以有三个表空间。因此,如果表空间损坏,则会丢失三分之一的数据。分区是否使您的表更可用?不是真的

添加或删除分区可以更轻松地管理大量数据。但是您是否可能删除所有状态为“已正确工作”的行?不太可能。分区是否使您的表更易于管理?不是真的

分区的性能优势来自查询修剪,优化器可以立即对表中的块进行折扣。现在每个分区有130万行。因此,即使您查询
STATUS='WORKED\u'
,您仍然需要筛选大量记录。很有可能,任何不涉及状态的查询都会比针对未分区表的查询执行得更差。分区是否提高了表的性能?可能不会

到目前为止,我一直假设您的分区是均匀分布的。但你的最后一个问题表明情况并非如此。大多数行(如果不是全部的话)将正确地结束在
工作单元中。因此,与其他分区相比,该分区将变得巨大,并且从分区中获益的机会变得更加渺茫

最后,你提出的方案没有弹性。作为当前卷,每个分区将有130万行。当您的表总计增长到4000万行时,每个分区将容纳1330万行。这很糟糕

那么,是什么使分区密钥成为一个很好的候选者呢?一个是生成大量分区,一个是分区大小大致相等,一个是键的值不太可能更改,一个是值在底层对象的生命周期中具有某种意义,最后一个是在针对表运行的大量查询中有用的分区


这就是为什么像DATE_CREATED这样的东西是数据仓库中事实表分区的流行选择。它在一系列粒度上生成合理数量的分区(通常选择日、月或年)。我们在给定的时间跨度内创建的记录数量大致相同。数据加载和数据存档通常是根据年龄(即创建日期)进行的。BI查询几乎总是包含时间维度。

是的,我想提高查询性能。该表每天大约有5000个插页。我感兴趣的是,在改进大规模错误提取的同时,不要恶化这种性能(这种查询与字段状态和类型相关)。它每天被读取很多次,总是按状态搜索(必须处理具有特定状态的每个记录,然后更新状态。99%的时间会进入最终状态。其他时间,出现错误,我们必须了解如何解决)。我想提高大规模行查找的性能。这个答案对我来说非常有用,谢谢。