【发布时间】:2011-02-13 14:48:11
【问题描述】:
大家好,尝试优化此查询以解决重复用户问题:
SELECT userid, 'ismaster' AS name, 'false' AS propvalue FROM user
WHERE userid NOT IN (SELECT userid FROM userprop WHERE name = 'ismaster');
问题是 NOT IN 之后的选择是 120.000 条记录,而且它需要永远。
使用 cmets 中建议的解释前缀返回:
QUERY PLAN
--------------------------------------------------------------------------------
--
Seq Scan on user (cost=5559.38..122738966.99 rows=61597 width=8)
Filter: (NOT (SubPlan 1))
SubPlan 1
-> Materialize (cost=5559.38..7248.33 rows=121395 width=8)
-> Seq Scan on userprop (cost=0.00..4962.99 rows=121395 width=8
)
Filter: ((name)::text = 'ismaster'::text)
(6 rows)
有什么建议吗?
【问题讨论】:
-
能否请您使用 psql 连接到您的数据库,然后发出您的查询,前面加上 explain ("explain SELECT userid,..."),然后将输出添加到您的问题中?
-
“优化”在标题中拼写错误。
标签: sql optimization postgresql query-optimization