これは、私が決定的な答えを得たことのない質問です。この例では MySQL を使用しています。
かなり大きな値のセットが与えられた場合 (500 としましょう)。IN() 句でこれらの値を使用してテーブルを検索する方が速いですか?
SELECT * FROM table WHERE field IN(values)
または、メモリ内に一時テーブルを作成し、それに値を入力して、検索対象のテーブルに結合します。
CREATE TEMPORARY TABLE `temp_table` (`field` varchar(255) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO temp_table VALUES (values)
SELECT * FROM table t1 JOIN temp_table t2 ON t1.field = t2.field
どちらの方法でも同じ結果セットが生成されます。
独自の基本的なベンチマーク テストをいくつか行ったところ、500 を超える値を処理する場合、IN() 句よりも一時テーブルを使用する方が速くなることがわかりました。
誰かが MySQL の内部の仕組みと、この質問に対する適切な答えを説明できますか?
ありがとう、レオ