Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/subquery-optimization.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API