postgresql - 为什么这个查询会导致顺序扫描?

标签 postgresql postgresql-performance

我是 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/

相关文章:

postgresql - 如何在 postgresql 中转换为用户定义的类型

sql - 将循环替换为 INSERT/UPDATE 的单个查询

sql - 带有 CASE 语句的 PostgreSQL 慢连接

database - 选择 * 与选择所有列名

sql - SELECT * 语句中的列顺序 - 保证?

database - 具有多个模式的 Postgresql 一个数据库与具有一个模式的多个数据库

java - 如何将 Spring Boot Web 应用程序连接到 postgresql 数据库

SQL 窗口函数 - SELECT DISTINCT ORDER BY LIMIT

postgresql 不使用索引作为主键 = 外键

python - 通过 Binary Copy 将包含 PostGis 字段的数据批量加载到 PostgreSQL