【发布时间】:2009-02-25 11:47:25
【问题描述】:
如果我有一个多列索引(a,b,c)和一个单独的索引 d,那么我的查询使用 b,a,c,d 顺序是否会选择两个索引?是否会为此查询选择索引?
【问题讨论】:
如果我有一个多列索引(a,b,c)和一个单独的索引 d,那么我的查询使用 b,a,c,d 顺序是否会选择两个索引?是否会为此查询选择索引?
【问题讨论】:
在 DB2 命令行中,试试这个:
db2 => explain plan for ...insert-query-here...
在结果中,您将看到何时使用索引以及何时 DB2 将使用全表扫描。
【讨论】:
如果将其更改为 a, b, c, d,则将使用 (a, b, c) 索引。
如果您将其更改为 d、b、a、c(或以 d 开头的任何内容),则会选择 (d) 索引。
基本上,以与要使用的索引相同的顺序使用列。
【讨论】:
基于成本的优化器(例如 DB2 的)将使用表和索引对象的统计信息来确定 (A,B,C) 索引还是 (D) 索引更适合给定查询。索引基数(索引中唯一值的数量)是 RUNSTATS 命令收集的几个数据统计信息之一,可帮助优化器估计每个可能访问路径的相对 I/O 和 CPU 成本。 Aaron Digulla 的回答中提到的解释命令以及 db2expln 工具可以帮助您了解将选择哪个索引。
【讨论】: