@StasM извините, но не совсем уверен. Поведение также может отличаться в зависимости от версии MySQL.

ет наэтот вопрос SQLЯ столкнулся с утверждением, что фиксированное значениеIN() оператор гораздо медленнее, чемINNER JOIN с тем же содержанием, что лучше создать временную таблицу для значений и присоединиться к ним. Верно ли это (в общем, с MySQL, любым другим SQL-движком) и если да, то почему? Наглядно,IN должно быть быстрее - вы сравниваете потенциальное совпадение с фиксированным набором значений, которые уже находятся в памяти и в нужном формате, в то время как с JOIN вам придется просматривать индексы, потенциально загружать данные с диска и выполнять другие операции это может быть не нужно с IN. Я что-то упустил?

Обратите внимание, что в отличие отэтот вопрос и это много дубликатов, я говорю оIN() зафиксировав множество значений, а не подзапрос.

 Martin Smith23 янв. 2011 г., 00:15
Вопрос, с которым вы связаны, - это SQL Server. Не уверен, если вы уже знаете, но MySQL может быть катастрофически плохо сс подзапросом тоже
 StasM23 янв. 2011 г., 00:18
Оригинальный вопрос @Martin (первая ссылка) был о MySQL. Я знаю о проблемах MySQL с подзапросами, но я предположил, что с константными списками все в порядке, поэтому утверждение в ответе @ DVK меня удивило.
 Martin Smith23 янв. 2011 г., 00:21
Думал, что это может быть так, но ссылка может быть интересна для некоторых.
 Pointy23 янв. 2011 г., 00:09
Это определенно то, что варьируется между платформами БД. По моему опыту с SQL Server и PostgreSQL,IN предложения по константам против индексов очень быстрые.

Ответы на вопрос(1)

Решение Вопроса

что иногда называют ошибкой в MySQL.

В MySQL, по-видимому, низкий порог для предложений IN, когда он переключается на TABLE / INDEX SCAN вместо сбора нескольких разделов (по одному на элемент IN) и их объединения.

С INNER JOIN почти всегда приходится использовать прямую строку за строкой в коллекции JOIN, поэтому иногда она быстрее

Обратитесь к этим страницам справки MySQL

В соображениях подзапросаВ (постоянный список) производительности

Я могу ошибаться, так как кажется, чтоIN (constant value list) всегда следует использовать бинарный поиск по каждому элементу ...

 StasM23 янв. 2011 г., 00:07
Любая идея о том, что длина делает это плохо?
 Pointy23 янв. 2011 г., 00:02
Положите значения во временную таблицу.
 RichardTheKiwi23 янв. 2011 г., 00:13
@StasM извините, но не совсем уверен. Поведение также может отличаться в зависимости от версии MySQL.

Ваш ответ на вопрос