レコードにアクセスしようとしていますが、次のような構文を使用して、たとえば ID のリストを持つレコードを除外します。
WHERE id NOT IN (1,3,4,6,7, ...
データベースが大きくなるにつれて、ID のリストも大きくなります。いつか問題になるのでしょうか?
除外する ID のリストを別のテーブルに格納することを検討してから、次の SQL を使用します。
WHERE id NOT IN (select id from excluded_ids);
スケーラビリティid
のためにの列にインデックスを付けます。excluded_ids
あなたのステートメントの必要性に応じて、私は通常、そのような状況で長い値のリストを避ける傾向があります.別のテーブルとサブセレクトを求めています.
MySQLマニュアルから:
IN リストの値の数は、max_allowed_packet 値によってのみ制限されます。
したがって、このリストが非常に大きくなったときにステートメントが壊れないように、 max_allow_packetの値を確認してください。
私は自分のデータベースでテストを実行しました.約800万行あり、そのうちの約10行を除外しました. 実行に25秒かかりました。それはスケーラブルではないことを意味すると思います;)