为什么此查询会导致顺序扫描?

时间:2012-11-16 21:27:02

标签: postgresql postgresql-performance

我对PostgreSQL很新,请原谅我,如果我不明白的话。我有一个分布在6个表中的约4.5亿行的数据库(每个表都有主键)。当我运行以下查询时:

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

po。“Id”是主键。我只是VACUUM ANALYZED整个数据库。您可以看到EXPLAIN ANALYZE详细信息 here 。 PaymentOrders表包含4000万行,而Payments包含3.5亿行。 我在Windows 8机器上运行x64 PostgreSQL 9.2,I5 CPU(4核3.3GHz),8GB RAM。 您还可以看到我的postgresql.conf文件here

任何人都知道为什么此查询会导致Payments表上的顺序扫描?我做错了什么或PostgreSQL有一些严重的缺陷? 我开始严重怀疑PostgreSQL查询规划器......

2 个答案:

答案 0 :(得分:2)

您是否对FOREIGN KEY关系的两边做了索引?特别是,Payments.PaymentOrderID是否有索引?

答案 1 :(得分:0)

是po。“Id”= p。“PaymentOrderId”是同一类型?他们需要匹配规划者使用索引加入它们。