我在Postgres數據庫運行一個相對簡單的查詢:簡單查詢到很長一段時間
INSERT INTO tt (pid, trip_pid) SELECT stop_time.pid, trip.pid
FROM stop_time, trip
WHERE stop_time.trip_id = trip.trip_id AND
17 = trip.gtfsfeed_id
AND 17 = stop_time.gtfsfeed_id
TT是一個臨時表,stop_time的包含約200萬行,行程只包含大約50,000。這個查詢在我的aws rds實例上運行了一個多小時,我不知道爲什麼。這個查詢有沒有可悲的低效率?
編輯:這裏是EXPLAIN(我創建了一個新的臨時表相同的列運行解釋)
QUERY PLAN
--------------------------------------------------------------------------------
Insert on ll (cost=2604.38..75394.65 rows=1649975 width=8)
-> Hash Join (cost=2604.38..75394.65 rows=1649975 width=8)
Hash Cond: ((stop_time.trip_id)::text = (trip.trip_id)::text)
-> Seq Scan on stop_time (cost=0.00..49406.68 rows=1835694 width=34)
Filter: (gtfsfeed_id = 17)
-> Hash (cost=2123.74..2123.74 rows=38451 width=34)
-> Seq Scan on trip (cost=0.00..2123.74 rows=38451 width=34)
Filter: (gtfsfeed_id = 17)
你能向我們展示查詢的'EXPLAIN PLAN'嗎? –
我已經添加了它 – Derongan
嘗試使用forall語句批量插入。 – Avi