1

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

SELECT DISTINCT col
FROM PUBLIC.TABLE;

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

我检查了这个并运行:

SELECT SELECTIVITY(CLUSTERNODE ) FROM PUBLIC.TRANSFORMATION;

返回“1”。

有任何想法吗?

4

1 回答 1

3

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

文档说,在较新的版本中,这些是自动更新的,但似乎需要一定数量的 INSERT(或其他突变),至少在我的情况下,单独升级并不能解决问题(我从 1.2.143 升级至 1.3.171)。

只需执行“分析”更新查询,一切都会好起来的。就我而言,执行时间从近一分钟下降到 300 毫秒。

于 2013-04-08T20:44:58.007 回答