我对 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 查询计划器...