在SQL Server执行计划中,索引扫描和索引查找有什么不同
我使用的是SQL Server 2005。
发布于 2009-07-16 10:07:29
索引扫描是SQL server读取整个索引以查找匹配项的地方-这所需的时间与索引的大小成正比。
索引查找是指SQL server使用索引的b树结构直接查找匹配的记录(有关其工作原理的信息,请参阅http://mattfleming.com/node/192 )所用的时间仅与匹配记录的数量成正比。
发布于 2009-07-16 10:23:30
要遵循的基本规则是扫描不好,搜索好。
索引扫描
当SQL Server执行扫描时,它会将要从磁盘读取的对象加载到内存中,然后从上到下读取该对象,查找所需的记录。
索引Seek
当SQL Server执行查找时,它知道数据将在索引中的什么位置,因此它从磁盘加载索引,直接转到它需要的索引部分,并读取到它需要的数据结束的位置。这显然是一个比扫描更有效的操作,因为SQL已经知道它要查找的数据位于何处。
如何修改执行计划以使用查找而不是扫描?
当SQL Server查找您的数据时,可能使SQL Server从查找切换到扫描的最大原因之一是,当您要查找的某些列未包含在您希望它使用的索引中时。大多数情况下,这将使SQL Server回退到执行聚集索引扫描,因为聚集索引包含表中的所有列。这是(至少在我看来)我们现在能够在索引中包含列,而无需将这些列添加到索引的索引列的最大原因之一。通过在索引中包含额外的列,我们增加了索引的大小,但我们允许SQL Server读取索引,而不必返回到聚集索引或表本身来获取这些值。
参考
有关SQL Server执行计划中这些运算符中每个运算符的具体信息,请参阅...
发布于 2017-07-22 21:42:08
简短回答:
https://stackoverflow.com/questions/1136524
复制相似问题