当前位置: 首页 > 面试题库 >

更好地使用包含索引的列的聚集索引还是非聚集索引?

充鑫鹏
2023-03-14
问题内容

当我查看特定查询的执行计划时,我发现我的成本的77%在聚簇索引查找中。

我使用聚集索引的事实是否意味着我不会因为输出的列而看到性能问题?

对我来说,创建一个非聚集版本并包含所有正在输出的列会更好吗?

更新:聚集索引使用组合键。不知道这是否有所作为。


问题答案:

使用非聚集索引上的包含列的原因是为了避免对聚集数据进行“书签查找”。问题是,如果SQL Server _理论上可以_使用特定的非聚集索引,但Optimiser估计将存在“太多”书签查找,则将忽略该索引。但是,如果可以直接从索引访问所有选定的列,则无需进行书签查找。

对于您而言,通过“聚集索引查找”访问数据的事实非常有前途。很难提高其性能。包括所有选定列的非聚集索引可能会 稍微
快一些,但这仅仅是因为原始数据要少一些。( 但不要忘记增加插入/更新时间的代价 。)

但是,您应该检查详细信息…

  • 如果您使用的是复合键,而查找实际上仅在键的开头,那么您可能不会很幸运。您可能会发现搜索范围仅缩小到500,000行,然后根据其他条件进行搜索。在这种情况下,请尝试使用一些非聚集索引。
  • 聚集索引查找本身可能很好;但是如果由于某些其他方面无法有效地返回太多行而在查询中执行了100,000次,那么通过提高聚集索引查找的性能就不会有太大收获。

最后,阐述戴维克的评论:“成本是相对的”。仅仅因为群集是查询成本的77%,并不意味着存在问题。可以编写一个简单的1表查询,该查询返回一个单行,并且聚集索引查找成本为100%。(但是,当然,作为唯一完成的“工作”,这
将是 工作的100%…而即时的100%仍是 即时的 。 所以:“不用担心;要开心!”



 类似资料:
  • 问题内容: 查看执行计划,我在输出列表中看到“列A”。该操作是对非聚集索引的索引扫描:“ IX_name” 当我看到此索引的定义时。在“索引键”列或“包含”列中都看不到“ A列”。 如何使用非聚集索引来输出索引中不存在的列。它不应该在表或其他带有“ A列”的索引上使用“表扫描”。 问题答案: 如果表本身是集群1,那么所有二级索引都包含集群键2的副本(该键确定集群表中行的物理顺序)。 原因:群集表中

  • 本文向大家介绍sql 聚集索引和非聚集索引(详细整理),包括了sql 聚集索引和非聚集索引(详细整理)的使用技巧和注意事项,需要的朋友参考一下 聚集索引    一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索

  • 本文向大家介绍SQL Server中的聚集索引和非聚集索引之间的区别,包括了SQL Server中的聚集索引和非聚集索引之间的区别的使用技巧和注意事项,需要的朋友参考一下 索引是与实际表或视图相关联的查找表,数据库使用该查找表来改善数据检索性能的计时。在index中, 键存储在结构(B树)中,该结构使SQL Server可以快速有效地查找与键值关联的一行或多行。如果在表上定义了主键和唯一约束,则会

  • 本文向大家介绍浅析SQL Server 聚焦索引对非聚集索引的影响,包括了浅析SQL Server 聚焦索引对非聚集索引的影响的使用技巧和注意事项,需要的朋友参考一下 前言 在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没有任何意义,学习的过程必须同时也是一

  • 本文向大家介绍MySQL索引之聚集索引介绍,包括了MySQL索引之聚集索引介绍的使用技巧和注意事项,需要的朋友参考一下 在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别? 在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)。 也有人把聚集索引

  • 我在工作中继承了一个Dynamics CRM系统,运行:Version1612(8.2.2.112)(DB 8.2.2.112)。 我们所处的情况是,重复似乎通过失败的表单提交断断续续地发生,随后又重新提交。我们已经在内部发布了一个文档,解释了这种行为,并表示首先检查部分或全部事务是否真正成功是多么重要。但人类终归是人类,常常忘记... 是否有更好的解决方案,我没有,提供数据库级的一致性,并不妨碍