【问题标题】:SQL Server Plans : difference between Index Scan / Index SeekSQL Server 计划:索引扫描/索引查找之间的区别
【发布时间】:2010-11-11 07:31:20
【问题描述】:

在 SQL Server 执行计划中,索引扫描和索引查找有什么区别

我使用的是 SQL Server 2005。

【问题讨论】:

    标签: sql sql-server sql-execution-plan


    【解决方案1】:

    扫描会触及表格中的每一行,即使它是你所追求的

    查找仅查看您正在查找的行。

    搜索总是比扫描更好,因为它们在查找数据方面效率更高。

    可以找到很好的解释here

    【讨论】:

    • 搜索并不总是更好,例如,如果表相对较小并且需要返回该表中大部分行,则索引扫描可能会结束效率更高。
    • 嗨贾斯汀,我猜你想说表扫描有时会更好。 Indexes Seek 总是比 Index Scan 好,除非我们在谈论集群。但是,有时,由于您提到的原因,表扫描或聚集索引扫描可能更有效。有时,即使索引有条件字段,ms sql 也会使用该表,而不是寻找索引并从表中获取索引中不存在的字段。
    【解决方案2】:

    索引扫描是 SQL 服务器读取整个索引以查找匹配项的地方 - 所花费的时间与索引的大小成正比。

    索引查找是 SQL 服务器使用索引的 b-tree 结构直接查找匹配记录的地方(请参阅http://mattfleming.com/node/192 了解其工作原理) - 所用时间仅与匹配记录的数量成正比.

    • 一般而言,索引查找比索引扫描更可取(当匹配记录的数量成比例地远低于记录总数时),因为执行索引查找所花费的时间是恒定的,而与总的记录数无关表中的记录。
    • 但是请注意,在某些情况下,索引扫描可能比索引查找更快(有时明显快) - 通常在表非常小时,或者当大部分记录与谓词。

    【讨论】:

    【解决方案3】:

    简答:

    • 索引扫描:触摸除某些列之外的所有行。

    • 索引搜索:触摸某些行和某些列。

    【讨论】:

      【解决方案4】:

      要遵循的基本规则是扫描是坏的,搜索是好的。

      索引扫描

      当 SQL Server 进行扫描时,它会将要从磁盘读取的对象加载到内存中,然后从上到下读取该对象以查找它需要的记录。

      索引搜索

      当 SQL Server 进行查找时,它知道数据将在索引中的哪个位置,因此它从磁盘加载索引,直接转到它需要的索引部分并读取数据所在的位置它需要结束。这显然是比扫描更有效的操作,因为 SQL 已经知道它要查找的数据的位置。


      如何修改执行计划以使用搜索而不是扫描?

      当 SQL Server 正在查找您的数据时,可能会使 SQL Server 从查找切换到扫描的最重要的事情之一是当您要查找的某些列未包含在您希望它使用的索引中时.大多数情况下,这将使 SQL Server 回退到执行聚集索引扫描,因为聚集索引包含表中的所有列。这是我们现在能够在索引中包含列的最大原因之一(至少在我看来),而无需将这些列添加到索引的索引列中。通过在索引中包含额外的列,我们增加了索引的大小,但是我们允许 SQL Server 读取索引,而不必返回到聚集索引,或者返回到它自己的表来获取这些值。

      参考文献

      有关 SQL Server 执行计划中每个运算符的详细信息,请参阅....

      【讨论】:

        【解决方案5】:

        当索引定义无法在单行上找到满足搜索谓词时,就会发生索引扫描。在这种情况下,SQL Server 必须扫描多个页面以找到满足搜索谓词的范围行。

        在索引查找的情况下,SQL Server 使用 index 定义查找与搜索谓词匹配的单行。

        索引搜索更好、更有效。

        【讨论】:

          【解决方案6】:

          使用索引扫描,将扫描索引中的所有行以找到匹配的行。这对于小表可能很有效。 使用 Index Seek,它只需要触及实际符合条件的行,因此通常性能更高

          【讨论】:

            猜你喜欢
            • 2019-08-26
            • 1970-01-01
            • 1970-01-01
            • 2017-10-16
            • 2023-03-12
            • 2014-04-07
            • 1970-01-01
            • 1970-01-01
            • 2011-04-22
            相关资源
            最近更新 更多