2010-01-13 38 views
1

如果我正试图挤出查询中最后一滴性能,那么影响是否会让我的连接使用这些类型的索引。SQL Server:索引的类型如何影响连接的性能?

  • 聚集索引。
  • 非聚集索引。
  • 聚集索引或非聚集索引,其中可能没有涉及到连接的额外列。

如果我经历并创建只包含我的连接中所涉及的列的聚集索引,并且没有其他任何东西,我会获得任何性能吗?

(我知道我可能要聚集索引从另一指标移动(使该指数非群集),因为它只能有一个。)

+0

让表格定义和你试图做的连接将会很有帮助。名字并不重要,但你要加入的领域,你选择的领域和表中每个领域的大小都会影响答案。 – 2010-01-13 14:19:21

+0

我正在寻找一般答案。该查询是非常具体的,并针对一个非常规的数据库。但我会在下面作为回答发布。 – ctrlShiftBryan 2010-01-13 14:59:22

回答

1

我会获得任何性能,如果我去通过,并创建聚簇索引的仅包含参与我的加入,并没有其他的列?

不是我所理解的。聚集索引的一点是,它然后将磁盘上的数据按照该索引进行排序(因此为什么只能有这个索引),所以如果您的连接数据没有按照确切的列进行排序,我不会认为它会有所作为。另外,通过将可能会改变的数据(与密钥相对)放入聚簇索引中,可能会导致事情需要进行周期性重建,从而降低整体数据库的速度。

对不起,如果这听起来很愚蠢的问题,但你有没有尝试通过索引调整向导运行你的查询?任何时候都不是万无一失,但过去我已经有了一些体面的改进。

1

你只有一个聚集索引 - 这是控制磁盘/内存中的表的物理存储。

非聚簇索引重复包含的字段,指针指向具有该值的行。对连接中使用的列有一个索引应该可以提高性能。您可以通过在索引中使用“包含列”进一步优化 - 这会将行信息直接复制到索引中,这可以消除必须查找行本身才能执行选择的性能损失。

注意发生连接的顺序非常有用 - 索引中的列顺序应该与此匹配。请记住,SQL引擎可能在内部优化和重新排序查询 - 分析可能会有所帮助。

在大多数情况下,您可以使用数据库引擎优化顾问 - 它提供的建议非常重要。

1

如果你可以最好的选择是非聚集索引,它包含了你的所有连接元素,如果可能的话,你选择的是这个字段。

这将创建一个生成索引,这意味着SQL需要执行的所有字段都在一个索引上。

如果可能的话,有一个索引没有unnessasery字段。添加的每个字段都会使单个索引记录变大,每个索引记录越小,您在每个页面中获得的记录越多。您在每个页面中获得的索引项越多,您必须转到磁盘的次数越少。

聚集索引 - 将意味着在索引指定的顺序奠定了桌子上,这意味着你会得到更好的性能SELECT * FROM表,其中INDEXFIELD = 3,除非你选择很多大数据这不应该是必需的项目。

2

除了加雷扫罗的回答一个小小的澄清:

非聚集索引重复 包含的字段,与指针 行具有该值。

这个指向实际数据值的指针是你的集群关键字中的列(或列集合)。

这就是为什么你应该尽量保持聚类密钥小而静的主要原因之一 - 小,否则你会浪费大量的空间,在磁盘和服务器的RAM中,而且是静态的,因为否则,如果你的值发生了变化,你不仅需要更新你的聚类索引,还要更新你所有的非聚簇索引。

这种“查找指针是聚集键”功能已经在SQL Server自7版本,Kim Tripp will explain in great detail here

什么是聚集索引?

在SQL Server 7.0及更高版本中 内部依赖关系 集群关键字CHANGED。 (是的,这是 重要的是要知道的事情在7.0 CHANGED ......为什么呢?因为还有 一些人在那里,不 意识到多么激进的改变 发生在内部(WRT到 集群键)在SQL Server 7.0中)。

改变之处在于聚簇 键被用作来自非聚簇索引的“查找”值 。

+0

感谢您的澄清 - 我认为索引引用是内部引用,与所使用的集群密钥无关。很好学习新的东西! – 2010-01-13 14:44:53

+0

在CL表上处理NC索引时正确,但Heap上的NC索引仍然使用非易失性行ID,然后该表使用转发指针进行记录移动。 (这是特定于最新版本的SQL,2005/2008,而不是以前的版本) – Andrew 2010-01-13 14:47:33

+0

@Andrew:是的,但几乎没有一个好的理由**不**有一个聚集索引 - 所以它可能是最有可能的情况。据我所知,这是在SQL Server 7及以上 - 不只是2005年及以上。请参阅Kim Tripp的博客文章,她提到了这一点:http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx – 2010-01-13 14:49:57