Вы написали JOIN двух таблиц, посмотрели EXPLAIN и не узнали план: там, где вы ждали быстрый проход по индексу, база построила хеш-таблицу и просканировала всё целиком. Первая мысль — оптимизатор сломан. На практике почти всегда наоборот: у соединения таблиц есть три классических алгоритма выполнения, и планировщик честно выбрал тот, что показался ему дешевле по его оценке данных. Разберёмся, как устроены эти три способа и почему "неожиданный" выбор почти никогда не баг.
Подробнее →