Spec-Zone.ru › MySQL 9.2

27.6.2 Алгоритмы обработки представлений

Необязательная ALGORITHM определяющая CREATE VIEW или ALTER VIEW — это расширение MySQL стандарту SQL. Она влияет на то, как MySQL обрабатывает представление. ALGORITHM принимает три значения: MERGE, TEMPTABLE или UNDEFINED.

  • Для MERGE текст запроса, ссылающегося на представление, и определение представления объединяются таким образом, что части определения представления заменяют соответствующие части запроса.

  • Для TEMPTABLE результаты из представления извлекаются во временную таблицу, которая затем используется для выполнения запроса.

  • Для UNDEFINED MySQL выбирает, какой алгоритм использовать. Он предпочитает MERGE вместо TEMPTABLE, если это возможно, потому что MERGE обычно более эффективен, и представление не может быть обновлено, если используется временная таблица.

  • Если не указано ALGORITHM, алгоритм по умолчанию определяется значением флага derived_merge системной переменной optimizer_switch. Дополнительные сведения см. в разделе 10.2.2.4, «Оптимизация производных таблиц, ссылок на представления и общих табличных выражений с помощью слияния или материализации».

Причина, по которой следует явно указать TEMPTABLE, заключается в том, что блокировки на базовых таблицах могут быть освобождены после создания временной таблицы и до её использования для завершения обработки запроса. Это может привести к более быстрому освобождению блокировок, чем с использованием алгоритма MERGE, так что другие клиенты, использующие представление, не будут заблокированы так долго.

Алгоритм обработки представления может быть UNDEFINED по трём причинам:

  • В операторе CREATE VIEW отсутствует фраза ALGORITHM.

  • Оператор CREATE VIEW содержит явную фразу ALGORITHM = UNDEFINED.

  • ALGORITHM = MERGE указано для представления, которое может быть обработано только с использованием временной таблицы. В этом случае MySQL генерирует предупреждение и устанавливает алгоритм на UNDEFINED.

Как упоминалось ранее, MERGE обрабатывается путём объединения соответствующих частей определения представления в запрос, ссылающийся на представление. Следующие примеры кратко иллюстрируют работу алгоритма MERGE. В примерах предполагается, что существует представление v_merge с таким определением:

CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS
SELECT c1, c2 FROM t WHERE c3 > 100;

Пример 1: Предположим, что мы выполняем этот запрос:

SELECT * FROM v_merge;

MySQL обрабатывает запрос следующим образом:

  • v_merge становится t

  • * становится vc1, vc2, что соответствует c1, c2

  • Добавляется фраза WHERE

Результирующий запрос для выполнения становится:

SELECT c1, c2 FROM t WHERE c3 > 100;

Пример 2: Предположим, что мы выполняем этот запрос:

SELECT * FROM v_merge WHERE vc1 < 100;

Этот запрос обрабатывается аналогично предыдущему, за исключением того, что vc1 < 100 становится c1 < 100, и фраза WHERE представления добавляется к запросу WHERE с использованием коннектора AND (добавляются скобки, чтобы убедиться, что части фразы выполняются с правильным приоритетом). Результирующий запрос для выполнения становится:

SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);

По существу, запрос для выполнения имеет фразу WHERE следующего вида:

WHERE (select WHERE) AND (view WHERE)

Если алгоритм MERGE не может быть использован, вместо этого необходимо использовать временную таблицу. Конструкции, которые препятствуют слиянию, такие же, как и те, которые препятствуют слиянию в производных таблицах и общих табличных выражениях. Примеры — это SELECT DISTINCT или LIMIT в подзапросе. Подробности см. в разделе 10.2.2.4, «Оптимизация производных таблиц, ссылок на представления и общих табличных выражений с помощью слияния или материализации».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/view-algorithms.html

Spec-Zone.ru

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