[英]SQL Join with GROUP BY query optimisation
我正在嘗試優化以下查詢。
SELECT C.name, COUNT(DISTINCT I.id), COUNT(B.id)
FROM Categories C, Items I, Bids B
WHERE C.id = I.category
AND I.id = B.item_id
GROUP BY C.name
ORDER BY 2 DESC, 3 DESC;
我有一個索引
Categories(name, id), Items(category), and Bids(item_id, id).
每個表的PRIMARY KEY
是: Items(id), Categories(id), Bids(id)
有沒有可能優化查詢? 非常感激。
沒有EXPLAIN (ANALYZE, BUFFERS)
輸出,這是猜測。
查詢是如此簡單,以至於沒有什么可以優化的。
避免使正確的表格統計數字崩潰。 檢查EXPLAIN (ANALYZE)
以查看PostgreSQL的估計是否正確。
增加shared_buffers
,以使整個數據庫都適合RAM(如果可以)。
增加work_mem
以便所有哈希和排序都在內存中執行。
並非真的,您正在掃描所有記錄。
投標數據打中了多少項目記錄。 我可以想象所有表都經過全面掃描,並加入了哈希,並且忽略了索引。
query您的查詢似乎真的很簡單,並且我相信,由於表的大小,任何非真正低硬件的服務器都可以在心跳中運行此查詢。 但是,您總是可以使事情變得更好。 從理論上講,您可以進行以下優化,以提高查詢的性能:
... FROM Items I INNER JOIN Bids B ON I.id = B.item_id INNER JOIN Categories C ON C.id = I.category ...
另外,在查詢的開頭添加解釋分析,將顯示PostgreSQL查詢計划程序用來運行查詢的計划。 如果您對查詢計划了解一兩件事,建議您也查看一下查詢結果,以發現任何遺漏的低效率之處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.