在SQL Server执行计划中,索引扫描和索引查找之间有什么区别
我正在使用SQL Server 2005。
Answers:
索引扫描是SQL Server读取整个索引以查找匹配项的地方-花费的时间与索引的大小成正比。
索引查找是SQL Server使用索引的b树结构直接查找匹配记录的方法(有关其工作原理的信息,请参见http://mattfleming.com/node/192)-花费的时间仅与匹配记录的数量。
遵循的基本规则是:扫描效果不好,搜索效果很好。
索引扫描
当SQL Server进行扫描时,它会将要从磁盘读取的对象加载到内存中,然后从上至下从头读取该对象,以查找所需的记录。
索引搜寻
当SQL Server进行查找时,它知道数据将在索引中的何处,因此它将从磁盘加载索引,直接转到所需的索引部分,并读取所需数据的结束位置。这显然比扫描有效得多,因为SQL已经知道它要查找的数据位于何处。
如何修改执行计划以使用搜索而不是扫描?
当SQL Server查找数据时,可能使SQL Server从搜索切换为扫描的最大的事情之一就是您要查找的某些列未包括在您要使用的索引中。大多数情况下,这会使SQL Server退回到进行聚集索引扫描,因为聚集索引包含表中的所有列。这是最大的原因(至少在我看来是这样)的最大原因之一,就是我们现在能够将索引中的列包含在内,而无需将这些列添加到索引的索引列中。通过在索引中包括其他列,我们增加了索引的大小,但是我们允许SQL Server读取索引,而不必回到聚集索引或它自己的表中来获取这些值。
参考文献
有关SQL Server执行计划中每个运算符的详细信息,请参阅...。