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

标签 sql database-design indexing

关系表是表示多对多 (m:n) 关系的常见解决方案。

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

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

应该如何对其进行索引才能在每种 JOIN 情况下提供最佳性能?

  1. 聚集索引超过(Aid ASC,Bid ASC)(我猜这是强制性的)
  2. 选项 #1 加上一个附加索引(出价 ASC、援助 ASC)
  3. 或选项 #1 加上 (Bid ASC) 上的附加索引
  4. 还有其他选择吗?也许是供应商特定的东西?

最佳答案

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

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

CLUSTERED INDEX (a, b)
INDEX (b)

这将涵盖所有JOIN问题和ORDER BY

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

只要您的 ab 表的 id 上有 PRIMARY KEY,您就不会 需要创建额外的索引来处理ORDER BY ASC, DESC

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

关于sql - 关系表的最佳索引策略是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/851908/

相关文章:

arrays - 在矩阵中定位相邻元素的有效方法

开始大于停止的 Python 范围

sql - 无法为链接服务器 null 创建 OLE DB 提供程序 Microsoft.Jet.OLEDB.4.0 的实例

mysql - 评级系统查询

mysql - 数据库设计 : need unique rows + relationships

linq - Linq 的 .Net Framework 实现是否针对可索引类型优化 Skip?

sql - 具有 NULL 值的 CASE 表达式

mysql - 内部连接错误

php - 为什么 while 循环显示单行?

mysql - 在数据库表中分离 ADMIN 和 USERS 条目的最佳方法