当我的表中有大量行时,我的应用程序中有一个查询运行得非常快。但是,当行数适中(既不大也不小)时,相同的查询运行速度会慢 15 倍。
解释计划显示对中等规模数据集的查询正在使用嵌套循环其连接算法。大数据集使用散列连接.
我可以阻止查询规划器在数据库级别(postgresql.conf)或每个会话(SET enable_nestloop TO off
).
潜在的陷阱有哪些set enable_nestloop to off
?
其他信息:PostgreSQL 8.2.6,在 Windows 上运行。
设置时有哪些潜在的陷阱enable_nestloop
to off
?
这意味着您将永远无法有效地使用索引。
而且看来你现在已经不使用它们了。
查询如下:
SELECT u.name, p.name
FROM users u
JOIN profiles p ON p.id = u.profile_id
WHERE u.id = :id
最有可能会使用NESTED LOOPS
与INDEX SCAN
on user.id
and an INDEX SCAN
on profile.id
,前提是您已经在这些字段上构建了索引。
具有低选择性过滤器的查询(即需要超过10%
他们使用的表中的数据)将受益于MERGE JOINS
and HASH JOINS
.
但是像上面给出的查询需要NESTED LOOPS
高效运行。
如果您在此处发布查询和表定义,可能会在索引和查询性能方面做很多工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)