10.2.2 Оптимизация подзапросов, производных таблиц, ссылок на представления и общих табличных выражений
- 10.2.2.1 Оптимизация предикатов подзапросов IN и EXISTS с преобразованиями полусоединения и антисоединения
- 10.2.2.2 Оптимизация подзапросов с материализацией
- 10.2.2.3 Оптимизация подзапросов с помощью стратегии EXISTS
- 10.2.2.4 Оптимизация производных таблиц, ссылок на представления и общих табличных выражений с помощью слияния или материализации
- 10.2.2.5 Оптимизация выталкивания условий из производных таблиц
Оптимизатор запросов MySQL использует различные стратегии для оценки подзапросов:
-
Для подзапроса, используемого с предикатом
IN,= ANYилиEXISTS, оптимизатор имеет такие варианты:Полусоединение
Материализация
EXISTSстратегия
-
Для подзапроса, используемого с предикатом
NOT IN,<> ALLилиNOT EXISTS, оптимизатор имеет такие варианты:Материализация
EXISTSстратегия
Для производной таблицы оптимизатор имеет следующие варианты (которые также применяются к ссылкам на представления и общим табличным выражениям):
Объединить производную таблицу в блок внешнего запроса
Материализовать производную таблицу во временную внутреннюю таблицу
Следующее обсуждение содержит дополнительную информацию о перечисленных выше стратегиях оптимизации.
Ограничение для операторов UPDATE и DELETE, которые используют подзапрос для изменения одной таблицы, заключается в том, что оптимизатор не использует оптимизации подзапросов с полусоединением или материализацией. В качестве обходного решения попробуйте переписать их как операторы UPDATE и DELETE с участием нескольких таблиц и использованием соединения, а не подзапроса.
© 2025 Oracle
Licensed under the GPLv2 License.