(Недостаточно информации, даже со скриншотами, чтобы ответить разумно. Но я могу сделать предположение ...)
Когда сталкиваюсь с JOIN(s)
, оптимизатор часто (но не всегда)) использует эти правила, чтобы решить, с какой таблицы начинать:
Начните с таблицы, которая, кажется, имеет лучшую WHERE
фильтрацию. может побудить его выбрать стол с x
.Даже при полном сканировании таблицы выбор этой таблицы может быть лучше.
Начните с самой маленькой таблицы.
Примечание:Сканирует «первую» таблицу;для каждой строки в этой таблице он попадает в «следующую» таблицу, затем в следующую и т. д. Оптимизатор может свободно изменять порядок таблиц по своему усмотрению (в пределах ограничений, таких как LEFT
).
В действительности, более поздние воплощения Оптимизатора используют анализ на основе затрат.Однако два вышеприведенных «правила» - вот что эффективно происходит.
Кроме того, Оптимизатор может быть введен в заблуждение статистикой или ее отсутствием, на которой он основывает план запроса.