Это вопрос, на который я так и не получил окончательного ответа. Я использую 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 и как правильно ответить на этот вопрос?
Спасибо,
Leo