Spec-Zone .ru
спецификации, руководства, описания, API

18.5.2. Алгоритмы Обработки представления

Дополнительное ALGORITHM пункт для CREATE VIEW или ALTER VIEW расширение MySQL стандартного SQL. Это влияет, как MySQL обрабатывает представление. ALGORITHM принимает три значения: MERGE, TEMPTABLE, или UNDEFINED. Алгоритм значения по умолчанию UNDEFINED если нет ALGORITHM пункт присутствует.

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

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

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

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

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

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

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

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

SELECT * FROM v_merge;

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

Получающийся оператор, который будет выполнен, становится:

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);

Эффективно, у оператора, который будет выполнен, есть a WHERE пункт этой формы:

WHERE (select WHERE) AND (view WHERE)

Если MERGE алгоритм не может использоваться, временная таблица должна использоваться вместо этого. MERGE не может использоваться, если представление содержит какую-либо из следующих конструкций: