我是PostgreSQL的新手,如果有些明显的事情对我来说不清楚,请原谅。我有一个数据库,有4.5亿行分布在6个表中(每个表都有主键)。当我运行以下查询时:
SELECT * FROM "Payments" AS p
JOIN "PaymentOrders" AS po ON po."Id" = p."PaymentOrderId"
WHERE po."Id" = 1000“Id”是主键。我只是对整个数据库进行了真空分析。您可以看到解释分析细节这里。PaymentOrders表包含4000万行,而支付包含3.5亿行。我在Windows8机器上运行x64 PostgreSQL 9.2,I5 CPU (4核3.3GHz),8GB内存。您还可以看到我的postgresql.conf文件这里。
有人知道为什么这个查询会导致对支付表的顺序扫描吗?我是做错什么了还是PostgreSQL有一些严重的缺陷?我开始严重怀疑PostgreSQL查询计划器.
发布于 2012-11-16 21:30:54
你索引了外键关系的两边吗?特别是,是否有关于Payments.PaymentOrderID的索引?
发布于 2012-11-19 01:15:50
po."Id“= p."PaymentOrderId”是同一类型吗?它们需要匹配规划者使用索引来连接它们。
https://stackoverflow.com/questions/13424650
复制相似问题