[英]Optimizing SQL query on large table
我可以做任何優化來加速這個查詢。 目前運行需要 30 分鍾。
SELECT
*
FROM
service s
JOIN
bucket b ON s.procedure = b.hcpc
WHERE
month >= '201904'
AND bucket = 'Respirator'
解釋執行計划——
Gather (cost=1002.24..81397944.91 rows=9782404 width=212)
Workers Planned: 2
-> Hash Join (cost=2.24..80418704.51 rows=4076002 width=212)
Hash Cond: ((s .procedure)::text = (bac.hcpc)::text)
-> Parallel Seq Scan on service s (cost=0.00..77753288.33 rows=699907712 width=154)
Filter: ((month)::text >= '201904'::text)
-> Hash (cost=2.06..2.06 rows=14 width=58)
-> Seq Scan on buckets b (cost=0.00..2.06 rows=14 width=58)
Filter: ((bucket)::text = 'Respirator'::text)
查詢優化是沒有超級硬和快速規則的東西,它更像是一個反復試驗的東西。 有時你會嘗試一種技術,它會很好地工作,但同樣的技術對另一個查詢幾乎沒有影響。 話雖這么說,這里有幾件事我會試着讓你開始。
SELECT *
,列出您需要的列名。 如果您需要所有這兩個表,仍然列出它們。WHERE
子句中使用任何數字列來進行一些初步過濾嗎? 僅比較字符串數據類型幾乎總是查詢優化的痛點。同樣,這都是反復試驗,這些只是開始的幾個地方。
SELECT *
FROM service s JOIN
bucket b
ON s.procedure = b.hcpc
WHERE s.month >= '201904' AND
b.bucket = 'Respirator';
我建議索引:
bucket(bucket, hcpc)
service(procedure, month)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.