2013-05-16 2 views
0
select count(*) from user 
where userid not in (select userid from ship where status in ('1','0')) 
    and field='web'; 

이 간단한 진술은 몹시 오랜 시간 동안 실행되고있는 것처럼 보입니다. 어떻게 SQL을 바꿔서 더 빠르게 실행할 수 있습니까? 감사.내 간단한 SQL을 quicken

+0

내가 쿼리를 변경 도움이 될 생각하지 않지만, 사용자 ID 및 필드에 인덱스 것 : 사용자 ID 열이 인덱싱 가정 할 때,이 같은 일이 더 빠를 수 있습니다. – Scotch

+1

http://stackoverflow.com/tags/postgresql-performance/info를 읽고 'explain analyse'등을 포함하도록 질문을 편집하십시오. 또한 'NOT IN'을 피하는 것이 가장 좋습니다. 대신에'NOT EXISTS (SELECT 1 FROM ... WHERE ...)'을 시도해보십시오. –

답변

1

은 많은 양의 데이터를 처리 할 때 IN/NOT IN 않도록하는 것이 가장 좋습니다.

SELECT COUNT(DISTINCT u.userid) 
    FROM user u 
    LEFT JOIN ship s ON u.userid=s.userid AND s.status IN ('1', '0') 
WHERE s.userid IS NULL AND field='web'