特定の数のレコードから開始して、IN SELECTの述語 定数のリストよりも速くなります。
パフォーマンスの比較については、私のブログのこの記事を参照してください:
INのクエリで使用された列の場合 句は次のようにインデックス付けされます:
SELECT *
FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
、このクエリはEXISTSに最適化されています (これは、table1のレコードごとに1つのエントリを使用します )
残念ながら、MySQL HASH SEMI JOINを実行できません またはMERGE SEMI JOIN これはさらに効率的です(特に両方の列にインデックスが付けられている場合)。