2013-04-08 95 views
0

我有一個查詢,看起來像這樣:優化H2查詢:SELECT COUNT(*)FROM表WHERE X = Y

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

的 '結果' 列有一個索引。

H2告訴我,它使用索引,但我仍然得到一些接近全表掃描的東西,因爲大多數行具有「SUCCESS」集,而基數非常低。

有沒有辦法加快速度? 順便說一句,沒有'WHERE'部分的查詢速度非常快,正如文檔所述。

回答

1

我應該使用3子查詢工作:

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

這應該是快,因爲第一部分是直接查找,而其他兩個查詢要快(因爲大多數outcome通常是「成功」) 。

如果不是,你可以得到查詢計劃並將其添加到問題中(解釋分析select ...)嗎?

+0

工作,謝謝!我仍然不明白爲什麼平等運營商不工作,但更大 - 然後 - 更大 - 然後... – 2013-04-09 08:50:05

+0

平等運營商的工作和使用和索引,但正如你所說,只有少數條目不是'成功' ,所以在這種情況下計算這些速度會更快。 – 2013-04-09 09:34:49

相關問題