如何在基数较少的列上加快oracle sql查询

时间:2017-07-12 03:09:29

标签: sql oracle

我有一个大约有2000万行的表格,我会根据两列来进行查询,例如col1col2

例如,

select * from tmp where col1 = '1aagacdaafasd' and col2 in ('X','Y','Z')
  1. 对于col1,我为列col1创建了一个索引,它可以显着提高性能。
  2. 对于col2,问题在于col2只有几个不同的值(小基数)。如果我还在col2创建索引,我会问它是否会提高性能
  3. 也就是说,我创建了两个索引,一个用于col1,另一个用于col2

2 个答案:

答案 0 :(得分:2)

在col2上创建第二个索引可能不会带来任何好处。

此查询的最佳索引是:

  • 只是col1的索引
  • col1,col2
  • 上的单个索引

究竟哪个最好取决于您的数据分布。你应该互相测试这些。

答案 1 :(得分:2)

对于此查询:

select *
from tmp
where col1 = '1aagacdaafasd' and col2 in ('X', 'Y', 'Z');

最佳索引是综合索引:tmp(col1, col2)。索引中键的顺序很重要,col1需要在col2之前。