【问题标题】:multiple indexes same column sql多个索引同一列sql
【发布时间】:2013-04-08 20:44:27
【问题描述】:

对于 DB2 数据库,将表 tbl(colA、colB、colC)和查询视为

select *
 from tbl
where tbl.colA = 1234.

select *
from tbl
where tbl.colA =1234
and tbl.colB = 73874

如果我们在colA ii) 复合上创建两个索引会有所帮助 - colA,colB

如果上面的 sql 经常被访问,那么上面有两个索引会有所帮助。优化器会根据查询选择正确的索引吗?

【问题讨论】:

  • 复合索引应该用于任何使用索引前缀的查​​询。所以第二个索引对这两个查询都有帮助。

标签: indexing db2


【解决方案1】:

您只需要索引 (ii)。只要搜索数据位于列的前缀中,就会使用复合索引。因此,当您搜索 colA、colA and colB、colA, colB, and colC 和 colA, colB, colC, and colD 时,将使用 colA,colB,colC,colD 上的索引。

【讨论】:

  • 另外,在创建索引的时候,把正确的列顺序放好也很重要。如果 index 是 ColB, ColA, 那么 il 将被用作 index sargable, 效率不如 ColA, ColB。
  • 由 Barmar 和 AngocA 扩展上述内容,对于复合索引(COLA,COLB),如果有查询 select * from tbl where colB = 3456。它会使用索引进行此查询。
  • 不,如果 WHERE 子句不使用索引的前缀,则索引根本不能用于它。将复合索引想象成一个树形结构——在您首先选择 A 父级之前,您无法找到 B。
  • 感谢 Barmar,AngocA 回答我的问题。我现在对索引有了更好的理解。
  • 我想我说谢谢你很早。我可以将复合索引设置为 (cola,colb,colc) 和 (cola,cold, colc) 和 (colb,colc,cold)。
猜你喜欢
  • 2011-10-20
  • 2015-08-07
  • 2021-10-30
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2017-11-19
  • 1970-01-01
相关资源
最近更新 更多