我是 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 ANALYZE 详情 here 强>。 PaymentOrders 表包含 4000 万行,而 Payments 表包含 3.5 亿行。 我在 Windows 8 机器上运行 x64 PostgreSQL 9.2,I5 CPU(4 核 3.3GHz),8GB 内存。 你也可以看到我的 postgresql.conf 文件 here .
有人知道为什么这个查询会导致对 Payments 表进行顺序扫描吗?是我做错了什么还是 PostgreSQL 有一些严重的缺陷? 我开始严重怀疑 PostgreSQL 查询规划器...
最佳答案
您是否索引了 FOREIGN KEY 关系的两边?特别是 Payments.PaymentOrderID
是否有索引?
关于postgresql - 为什么这个查询会导致顺序扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424650/