如何加快对基数很少的列的oracle sql查询



>我有一个有大约 2000 万行的表,我将执行针对两列过滤的查询,例如col1col2

例如

select * from tmp where col1 = '1aagacdaafasd' and col2 in ('X','Y','Z')
  1. 对于col1,我为列col1创建了一个索引,它大大提高了性能。
  2. 对于col2,这里的问题是col2只有几个不同的值(小基数(。我会问如果我也在col2上创建索引是否会提高性能。

也就是说,我创建了两个索引,一个用于col1,另一个用于col2

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

此查询的最佳索引是:

  • 仅 Col1 上的索引
  • 两个 Col1、Col2 上的单个索引

确切地说,哪个是最好的将取决于您的数据分布。 您应该相互测试这些。

对于此查询:

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

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

最新更新