【问题标题】:Does the "leftmost prefix rule" of Index applies to SQL Server?Index的“最左前缀规则”是否适用于SQL Server?
【发布时间】:2020-08-24 01:10:50
【问题描述】:

在MySQL中,最左边的前缀适用于多列索引的情况,在

中提到

假设索引由 (col1, col2, col3) 组成。 符合索引搜索条件的组合:

  • (col1)
  • (col1, col2)
  • (col1, col2, col3)

不符合索引搜索条件的组合:

  • (col2)
  • (col2, col3)
  • (col3)

SQL Server 是否也对索引查找机制使用相同的规则?有官方文档可以参考吗?我试过搜索它,但没有运气:(提前谢谢大家!

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    该规则基本上就是扫描 b-tree 索引的规则。

    也就是说,还有另一种扫描方法,Oracle 称之为“跳过扫描”。这允许在索引中不是最左侧的键上扫描索引。一些数据库在更大程度上实现了这一点。 Here 是对该主题的一个很好的介绍。我不相信 SQL Server 实现了跳过扫描。

    虽然跳过扫描功能强大,但它们的实用性取决于索引中第一个键的基数。如果第一个键具有高基数,则它们不是很有效。

    【讨论】:

    • 恭喜1MM!!!!希望我亲眼目睹了这件大事。
    • @JohnCappelletti 。 . .谢谢。
    【解决方案2】:

    对于复合索引,SQL Server 也遵循类似的方法,其中仅考虑从左侧开始的列进行索引查找。以下是相同的官方文档:

    (a,b,c) 上的索引对于以下搜索查询很有用

    • 一个
    • a,b
    • a,b,c

    Read more on Index Design practices on MSDN

    如果索引包含多个,请考虑列的顺序 列。在等于的 WHERE 子句中使用的列 (=)、大于 (>)、小于 (

    例如,如果索引定义为 LastName,则 FirstName 为索引 当搜索条件为 WHERE LastName = 'Smith' 时将很有用 或 WHERE LastName = Smith AND FirstName LIKE 'J%'。但是,查询 优化器不会将索引用于仅搜索的查询 FirstName (WHERE FirstName = 'Jane')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多