sql - 调整 SQL 查询,(查询优化)

标签 sql postgresql database-tuning sql-tuning

我正在尝试调整查询中包含 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,当我将其更改为正确的查询时,它给了我正确的结果。

最佳答案

SELECT pe.id
FROM   SHOP.person pe
WHERE  EXISTS (
   SELECT *     
   FROM   SHOP.contactperson cp
   WHERE cp.personid = pe.id
   AND  cp.companyid = 5
   ); 

关于sql - 调整 SQL 查询,(查询优化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20934980/

相关文章:

mysql 将旧数据库转移到新数据库

php - 从每个类别中获取随机数据,每个类别的限制不同 php-mysql

sql - 将具有相似字符串的行分组

postgresql GET STACKED DIAGNOSTICS 不能用数组类型?

node.js - 加快我的 cloudant 查询速度

mysql - 使用所有数据库中用户表中的字段

mysql - SQL 查询获取州、城市、地址和邮政编码

postgresql - 找出一组行的哈希值

性能差和高 CPU 负载调优的 Mysql - cs-cart linux

mysql - 如何分析 MySQL