2015-09-07 63 views
1

我有一個表,我存儲了很多產品。我用這個查詢來獲得價格高於平均水平的所有產品:PostgreSQL中的子查詢優化

select price, name from product 
where price > (select avg(price) from compra) 

由於我有很多產品,我需要優化查詢。任何幫助?

+0

這個查詢將不會執行好,因爲你必須看看所有產品的價格,然後才能返回任何人。這裏最好的選擇是保持一個物化視圖的平均值或近似平均值。 –

回答

0

試試這個:

with query as (
select avg(price) as ave from product) 

select price, name 
from product p2, query 
where p2.price > query.ave 
+0

它工作,EXPLAIN ANALYZE顯示執行此查詢時更低的時間。 –

+4

不應該有太大的區別。奇。 –

+1

雖然同樣的計劃?如果在其他代碼之後立即執行,可能會受益於數據緩存,這可以解釋性能改進。 –