0
select count(*) from user 
 where userid not in (select userid from ship where status in ('1','0')) 
   and field='web';

この単純なステートメントは非常に長い時間実行されているようです。より高速に実行できるように SQL を変更するにはどうすればよいですか? ありがとう。

4

1 に答える 1

1

大量のデータを扱う場合は、IN/NOT IN を避けるのが最善です。ユーザー ID 列がインデックス化されていると仮定すると、次のような方が高速になる可能性があります。

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'
于 2013-05-16T06:50:17.227 に答える