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 整个数据库。您可以在此处查看解释分析详细信息。PaymentOrders 表包含 4000 万行,而 Payments 包含 3.5 亿行。我在 Windows 8 机器、I5 CPU(4 核 3.3GHz)、8GB RAM 上运行 x64 PostgreSQL 9.2。你也可以在这里看到我的 postgresql.conf 文件。

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

4

2 回答 2

2

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

于 2012-11-16T21:30:54.430 回答
0

po."Id" = p."PaymentOrderId" 是同一类型吗?它们需要匹配,以便规划器使用索引加入它们。

于 2012-11-19T01:15:50.050 回答