Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 H2 并有一个简单的查询,如下所示:
SELECT DISTINCT col FROM PUBLIC.TABLE;
H2 使用全表扫描,即使选择性很低,并且 col 上存在非唯一索引。
我检查了这个并运行:
SELECT SELECTIVITY(CLUSTERNODE ) FROM PUBLIC.TRANSFORMATION;
返回“1”。
有任何想法吗?
尽管选择性低(=基数),H2 可能不会在 DISTINCT 查询中使用现有索引的原因是它在内部维护表统计信息,这些统计信息用于确定列选择性,这些可能已过时,或者未在全部。
文档说,在较新的版本中,这些是自动更新的,但似乎需要一定数量的 INSERT(或其他突变),至少在我的情况下,单独升级并不能解决问题(我从 1.2.143 升级至 1.3.171)。
只需执行“分析”更新查询,一切都会好起来的。就我而言,执行时间从近一分钟下降到 300 毫秒。