У нас есть простой запрос, который выглядит так:
SELECT a,b,c,d FROM table WHERE a=1 and b IN ('aaa', 'bbb', 'ccc', ...)
Нет объединений, 5000 константных значений в предложении IN.
Теперь этот запрос выполняется на очень сильном (16-ядерном) сервере за 1-20 секунд. У таблицы есть индекс на (a, b), и мы также попытались обратить индекс на (b, a). Сервер имеет тонны памяти, и никто не пишет в эту таблицу - только 5 процессов, выполняемых, выбирают, как я описал выше.
Мы провели некоторое профилирование и увидели, что некоторые запросы тратят 3,5 секунды на «JOIN :: optimize» (. \ Sql_select.cc 977). Напоминаю, что в запросах вообще не используются объединения.
Что может быть причиной такого большого времени, затрачиваемого на оптимизацию объединений в таблице без объединения?
Вот результат EXPLAIN SELECT:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table range IX_A_B IX_A_B 65 \N 5000 Using where