H2:尽管选择性低,但SELECT DISTINCT缓慢

时间:2013-04-08 17:28:22

标签: sql h2

我正在使用H2并且有一个简单的查询,如下所示:

SELECT DISTINCT col
FROM PUBLIC.TABLE;

H2使用全表扫描,即使选择性很低,并且col上有一个非唯一索引。

我查了一下然后跑了:

SELECT SELECTIVITY(CLUSTERNODE ) FROM PUBLIC.TRANSFORMATION;

返回'1'。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

尽管选择性低(=基数),但在DISTINCT查询中H2可能不会使用现有索引的原因是它在内部维护表统计信息,用于确定列选择性,这些可能已过期,或者根本没有初始化。

文档说在较新的版本中,这些会自动更新,但似乎需要一定数量的INSERT(或其他突变),至少在我的情况下单独升级没有做到这一点(我从1.2.143至1.3.171)。

只需执行“分析”更新查询,一切都应该没问题。就我而言,执行时间从近一分钟下降到300毫秒。