Spec-Zone.ru › MySQL 5.7

23.5.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. Дополнительные сведения см. в Разделе 8.2.2.4, «Оптимизация производных таблиц и ссылок на представления с объединением или материализацией».

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

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

  • Определения ALGORITHM нет в инструкции CREATE VIEW.

  • В инструкции 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 в подзапросе. Подробнее см. Раздел 8.2.2.4, «Оптимизация производных таблиц и ссылок на представления с объединением или материализацией».

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

Spec-Zone.ru

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