[英]Tuning up a SQL query, (query optimization)
我試圖調整在查詢中具有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
);
您的join子句沒有使用與原始查詢相同的字段。 您應該使用聯系人表中的個人ID。
SELECT person.id
FROM SHOP.person
Join SHOP.contactperson
ON person.id = contactperson.personid
WHERE contactperson.companyid = 5;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.