Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 server 非唯一键上的sql server聚集索引_Sql Server - Fatal编程技术网

Sql server 非唯一键上的sql server聚集索引

Sql server 非唯一键上的sql server聚集索引,sql-server,Sql Server,我们有一个非常大的数据库,一直在使用我们想要摆脱的碎片。每当一个表变得非常大时,碎片就会起作用,我们启动一个与前一个表具有相同模式的新表,并在另一个表中保留一个数字,以帮助我们找到数据所在的表。这是一个繁琐的手动过程,意味着我们的数据分布在N个不同的表上,所有表都具有相同的模式 我们尝试的想法是通过使用索引消除这种切分需求。我们的数据查找查询不使用唯一键,返回的许多记录在列之间具有相同的值 下面说明了我们对特定表的许多查找选择,带*的字段表示该字段可能在选择中,也可能不在选择中 where子句:

我们有一个非常大的数据库,一直在使用我们想要摆脱的碎片。每当一个表变得非常大时,碎片就会起作用,我们启动一个与前一个表具有相同模式的新表,并在另一个表中保留一个数字,以帮助我们找到数据所在的表。这是一个繁琐的手动过程,意味着我们的数据分布在N个不同的表上,所有表都具有相同的模式

我们尝试的想法是通过使用索引消除这种切分需求。我们的数据查找查询不使用唯一键,返回的许多记录在列之间具有相同的值

下面说明了我们对特定表的许多查找选择,带*的字段表示该字段可能在选择中,也可能不在选择中

where子句:计划的\u测试、*脚本、*标签、*错误消息

组/顺序:messenger\u id、时间片、脚本、标签、错误消息、步骤顺序、*适配器类型

我的想法是,我不想创建一个包含所有这11个字段的索引。取而代之的是,我选择了3个似乎更常用的选项,包括始终位于where子句中的选项。我曾读到过这样一篇文章:最好不要索引太宽,字段太多。我还听说优化器将首先使用索引字段,而且拥有非唯一索引并不少见,尽管MSDN声明唯一索引是最大的优势。这不是我们数据的设计方式。我意识到SQL将向索引中添加一些内容以使其唯一,但这似乎与我们的目的无关

当我在SQLServerManagementStudio中查看与我们可能运行的查询类似的执行计划时,它说“聚集索引查找成本为100%”,但它使用的是我创建的聚集索引,因此我希望这比默认聚集索引要好,默认聚集索引只是生成的主键(以前是如何定义表的)。我希望我这里的内容与我们的切分方法一样好或更好,并且可以消除对切分的需求

我们确实一次向表中插入了大量数据,但这些行在许多列中都具有相同的数据值,我认为它们甚至会在末尾插入。这些插入不会与旧数据共享值,如果索引仅为3列,希望不会对插入造成太大影响


我所说的似乎是合理的,或者我应该看什么或考虑什么?谢谢,我不太熟悉这些类型的索引问题,但一直在浏览各种网站和实验。

一般来说,聚集索引越窄越好,因为聚集索引的聚类密钥将被添加到所有n中。在聚集索引上,使其效率降低

SQL server将为非唯一聚集索引添加一个uniquifier,使它们(以及所有非聚集索引)更宽

如果这些索引使用的空间对你不是问题,那么你应该考虑聚集索引键的值是否不断增加(或减少),好像它不是,你会得到页面分割和碎片,这肯定会伤害你的插入。


如果您可以检查不同索引策略对正常查询的影响,那么在测试系统中设置此选项可能是值得的。

通常,聚集索引越窄越好,因为聚集索引的聚集键将添加到所有非聚集索引中,使其效率降低

SQL server将为非唯一聚集索引添加一个uniquifier,使它们(以及所有非聚集索引)更宽

如果这些索引使用的空间对你不是问题,那么你应该考虑聚集索引键的值是否不断增加(或减少),好像它不是,你会得到页面分割和碎片,这肯定会伤害你的插入。 如果您可以检查不同索引策略对正常查询的影响,那么在测试系统中设置此选项可能是值得的。

单词“keys”和“non-unique”是正交的。如果列不是唯一的,则不能称为键。“keys”和“non-unique”是正交的。列如果键不是唯一的,则不能调用它们。