【问题标题】:Composite indexes for columns in joins and where连接中列的复合索引和位置
【发布时间】:2012-01-09 12:12:47
【问题描述】:

如果我有疑问:

Select *
From tableA
Inner Join tableB ON tableA.bId = tableB.id
Inner Join tableC ON tableA.cId = tableC.id
where
tableA.someColumn = ?

创建复合索引 (bId,cId,someColumn) 是否能获得任何性能优势?

我正在使用 DB2 数据库进行此活动。

【问题讨论】:

  • 您使用的是什么数据库供应商和产品?
  • 这完全取决于 DBMS。您的 DBMS 的执行计划可以立即回答这个问题。

标签: database optimization indexing


【解决方案1】:

索引连接取决于数据库使用的连接算法。你会在执行计划中看到这一点。

对于where 子句,您可能需要一个以someColumn 开头的tableA 索引。其他一切都取决于连接算法和连接顺序。

如果您发布执行计划,您可能会得到更具体的答案。您也可以阅读我网站上关于 sql 索引的“The Join Operation”一章并亲自尝试。

【讨论】:

    【解决方案2】:

    如果现在没有索引,我会猜测复合索引可能用于一个或两个内部连接。我怀疑它会在 WHERE 子句中使用。

    但是我已经做了很长时间了。猜测,就像希望一样,不能很好地扩展。

    与其猜测,不如学习如何使用DB2's explain and design advisor utilities。期望首先在开发计算机上测试诸如索引之类的东西。在生产中的 5 亿行表上构建三列索引不会让您受欢迎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2020-09-24
      • 2018-10-28
      • 1970-01-01
      • 2021-05-23
      • 2019-12-13
      • 2017-05-02
      相关资源
      最近更新 更多