0

我有一个看起来像这样的查询:

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

“结果”列有一个索引。

H2 告诉我它使用索引,但我仍然得到接近全表扫描的结果,因为大多数行都设置了“成功”,并且基数非常低。

有没有办法加快这个速度?顺便说一句,正如文档所说,没有“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

这应该很快,因为第一部分是直接查找,另外两个查询应该很快(因为大多数outcome通常是“成功”)。

如果没有,您能否获取查询计划并将其添加到问题中(解释分析选择...)?

于 2013-04-08T21:15:17.227 回答