关系表的最佳索引策略是什么?

Tom*_*lak 11 sql indexing database-design

关系表是表示多对多(m:n)关系的通用解决方案.

在最简单的形式中,它将引用两个相关表的外键组合到一个新的复合主键:

A        AtoB     B
----     ----     ----
*id      *Aid     *id
data     *Bid     data

应该如何编制索引以在每个JOIN情况下提供最佳性能?

  1. 聚集索引over(Aid ASC, Bid ASC)(无论如何,这是强制性的,我猜)
  2. 选项#1加上(Bid ASC, Aid ASC)的附加索引
  3. 或选项#1加上(Bid ASC)的附加索引
  4. 还有其他选择吗?可能是供应商特定的东西?

Qua*_*noi 8

我做了一些测试,这是更新:

要涵盖所有可能的情况,您需要:

CLUSTERED INDEX (a, b)
INDEX (b)
Run Code Online (Sandbox Code Playgroud)

这将涵盖所有的JOINsutiations和ORDER BY

请注意,索引on B实际上是排序的,(B, A)因为它引用了聚簇行.

只要你ab表上有PRIMARY KEYid,你不需要创建额外的索引来处理ORDER BY ASC, DESC.

有关详细信息,请参阅我博客中的条目:

  • INDEX(b)实际上是INDEX(b,a,b),因为你的表是聚类的.(b,a)上的索引实际上是INDEX(b,a,a,b),这完全没有意义. (2认同)