gpt4 book ai didi

database - 非聚集索引使用键而不是地址进入聚集索引?

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:57 24 4
gpt4 key购买 nike

documentation对于 SQL Server 2008 R2 声明:

Wide keys are a composite of several columns or several large-size columns. The key values from the clustered index are used by all nonclustered indexes as lookup keys. Any nonclustered indexes defined on the same table will be significantly larger because the nonclustered index entries contain the clustering key and also the key columns defined for that nonclustered index.

这是否意味着,当使用非聚集索引进行搜索时,聚集索引也是搜索?我最初认为非聚集索引直接包含页面( block )的地址及其引用的行。从上面的文本来看,它似乎只包含来自非聚集索引的键而不是地址。

有人可以解释一下吗?

最佳答案

是的,这正是发生的事情:

  • SQL Server 在非聚集索引中搜索你的搜索值
  • 如果找到匹配项,则在该索引条目中还有聚簇键(构成聚簇索引的一列或多列)
  • 使用该聚簇键,现在执行键查找(通常也称为书签查找)- 在聚簇索引中搜索给定的值
  • 当找到该项目时,聚簇索引导航结构的叶级的整个数据记录都存在并且可以返回

SQL Server 这样做,因为使用物理地址真的很糟糕:

  • 如果发生页面拆分,所有移至新页面的条目都将更新
  • 对于所有这些条目,所有非聚集索引也必须更新

这对性能来说真的很糟糕。

这就是为什么在 SELECT(而不是总是 SELECT *)中使用有限的列列表是有益的,甚至可能在中包含一些额外的列的原因之一非聚集索引(使其成为覆盖索引)。这样,您就可以避免不必要且昂贵的书签查找。

并且因为聚簇键包含在每个非聚簇索引中,所以这是一个和窄键非常重要 - 最好是 INT IDENTITY 或类似的东西那个 - 而不是一个巨大的结构;聚簇键是 SQL Server 中复制次数最多的数据结构,应该越小越好。

这些书签查找相对昂贵的事实也是查询优化器可能会在您选择大量行后立即选择索引扫描的原因之一——有时,只扫描聚簇索引可能是比进行大量 key 查找便宜。

关于database - 非聚集索引使用键而不是地址进入聚集索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com