나는 postgresql 데이터베이스와 함께 일하고 있는데 쿼리 (첫 번째)를 개선하고 싶다. 나는 그것을 두 번째 것으로 다시 쓴다. 그러나 나는 "NOT IN"이 매우 느린 건설이라고 말하는 기사를 읽었습니다. 나는 당신이 두 명 중 어느 것이 더 빠르며 더 나은 해결책을 제시하길 바란다.어느 sql 쿼리가 더 빠릅니까?
첫 번째 쿼리
UPDATE reseller_product d SET status=3 FROM (
SELECT reseller_product.sku FROM reseller_product
LEFT OUTER JOIN main_table ON main_table.sku=reseller_product.sku
WHERE main_table.sku IS NULL AND reseller_product.reseller_id='||resID||'
)as r
WHERE d.sku=r.sku and d.distributor_id='||distrID||' and d.reseller_id='||resID||'
두 번째 쿼리
UPDATE reseller_product SET status=3
WHERE distributor_id='||distrID||' AND reseller_id='||resID||'
AND sku NOT IN (SELECT sku FROM main_table);
편집
죄송합니다, 두 번째 쿼리에 이름이 "D"와 오류를 발견하지 않았다
대답은 .sku의 고유성과 고유성 및 카디널리티에 따라 달라집니다. BTW :'NOT EXISTS()'를 사용하는이 쿼리의 세 번째 버전이 있습니다. 두 번째 쿼리에는 상관 관계 이름'd'가 정의되어 있지 않습니다. 따라서 쿼리가 실패하므로 가장 빠릅니다. – wildplasser
"EXPLAIN"명령을 사용하여 쿼리의 실행 계획을 자세히 설명 할 수 있습니다.이 도움이 될 수 있습니다. http://www.postgresql.org/docs/9.2/static/sql-explain.html –
@wildplasser the correlation 이름 d가 두 번째 쿼리에 정의되어 있지 않습니다. 따라서 쿼리가 실패하므로 가장 빠릅니다. 이것은 정말로 진실하고 재미 있습니다. :) –