【发布时间】:2014-01-05 14:54:23
【问题描述】:
我正在尝试调整查询中包含 IN 子句的 SQL 查询。
我尝试用 Join 替换 IN 并查看查询计划。两者在执行时间上看起来相似,但结果不同。有人可以帮我解决这个问题吗? 我在 pgadmin III 中使用商店数据库。 提前致谢。 原始查询:
SELECT person.id
FROM SHOP.person
WHERE person.id IN (SELECT personid
FROM SHOP.contactperson
WHERE companyid = 5);
到
SELECT person.id
FROM SHOP.person
JOIN SHOP.contactperson
ON person.id = contactperson.id
WHERE contactperson.companyid = 5;
已编辑:现在此查询返回正确结果:
SELECT person.id
FROM SHOP.person
JOIN SHOP.contactperson
ON person.id = contactperson.personid
WHERE contactperson.companyid = 5;
我使用的是contactperson.id 而不是contactperson.id,当我将其更改为正确的查询时,它给了我正确的结果。
【问题讨论】:
-
性能调优高度特定于供应商 - 我们需要知道您使用的具体数据库(以及哪个版本)。 SQL 只是查询语言 - 被绝大多数关系数据库系统使用.....
-
@marc_s 它是一个商店数据库,我在 pgadmin III 中使用它。
-
请显示您的表结构,包括索引和查询计划。
-
@MartinSmith 谢谢你,现在一切正常了。
-
达哈泽注意到了这一点。不是我!
标签: sql postgresql database-tuning sql-tuning