特定の数のレコードから開始して、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
これはさらに効率的です(特に両方の列にインデックスが付けられている場合)。