2012-11-16 20 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”是同一类型吗?他们需要匹配规划师使用索引来加入他们。