0

次のようなクエリがあります。

EXPLAIN ANALYZE 
select count(*) from Table t 
where t.outcome='SUCCESS'

「結果」列には索引があります。

H2 はインデックスを使用していることを教えてくれますが、ほとんどの行には「SUCCESS」が設定されており、カーディナリティが非常に低いため、完全なテーブル スキャンに近い結果が得られます。

これをスピードアップする方法はありますか?ところで、ドキュメントにあるように、「WHERE」部分のないクエリは非常に高速です。

4

1 に答える 1

1

3つのサブクエリを使用するとうまくいくはずです:

select
  (select count(*) from table) - 
  (select count(*) from table where outcome<'SUCCESS') -
  (select count(*) from table where outcome>'SUCCESS')
as count

最初の部分は直接参照であるため、これは高速である必要があり、他の 2 つのクエリは高速である必要があります (outcome通常、ほとんどが「成功」であるため)。

そうでない場合は、クエリ プランを取得して質問に追加していただけますか (explain analyze select ...)。

于 2013-04-08T21:15:17.227 に答える