1

私は H2 を使用しており、次のような単純なクエリがあります。

SELECT DISTINCT col
FROM PUBLIC.TABLE;

H2 は、選択性が低く、col に一意でないインデックスがある場合でも、完全なテーブル スキャンを使用します。

私はこれをチェックして実行しました:

SELECT SELECTIVITY(CLUSTERNODE ) FROM PUBLIC.TRANSFORMATION;

「1」を返しました。

何か案は?

4

1 に答える 1

3

選択性 (カーディナリティ) が低いにもかかわらず、既存のインデックスが DISTINCT クエリで H2 によって使用されない理由は、列の選択性を判断するために使用されるテーブル統計を内部で保持しているためです。全て。

ドキュメントによると、新しいバージョンではそれらは自動的に更新されますが、ある程度のINSERT(または他の突然変異)が必要なようです。少なくとも私の場合、アップグレードだけではうまくいきませんでした(1.2.143からアップグレードしました1.3.171 に)。

「分析」更新クエリを実行するだけで、すべてがうまくいくはずです。私の場合、実行時間はほぼ 1 分から 300 ミリ秒に短縮されました。

于 2013-04-08T20:44:58.007 に答える