2012-11-16 62 views
1

我對PostgreSQL非常陌生,請原諒我,如果有什麼明顯的事情我不清楚。我有一個擁有大約4.5億行分佈在6個表(每個表都有主鍵)的數據庫。當我運行以下查詢:此查詢爲何導致順序掃描?

SELECT * FROM "Payments" AS p 
JOIN "PaymentOrders" AS po ON po."Id" = p."PaymentOrderId" 
WHERE po."Id" = 1000 

po。「Id」是主鍵。我只是VACUUM ANALYZED整個數據庫。你可以看到EXPLAIN ANALYSE細節here。 PaymentOrders表包含4000萬行,而Payments包含3.5億行。 我在Windows 8機器上運行x64 PostgreSQL 9.2,I5 CPU(4核3.3GHz),8GB內存。 另外你可以看到我的postgresql.conf文件here

任何人都有任何想法爲什麼這個查詢導致對付款表的順序掃描?我做錯了什麼或PostgreSQL有一些嚴重的缺陷? 我開始嚴重懷疑PostgreSQL查詢計劃器...

+0

版本,解釋分析,查詢文本...謝謝! –

回答

2

您是否索引了FOREIGN KEY關係的兩邊?特別是Payments.PaymentOrderID有沒有索引?

+0

不,我沒有,因爲只有PaymentOrder.Id包含在where子句中。我會嘗試索引第二面,並讓你知道結果。謝謝 – Davita

0

是po。「Id」= p。「PaymentOrderId」是同一類型嗎?他們需要匹配規劃師使用索引來加入他們。

相關問題