Resumo : neste tutorial, você aprenderá sobre algoritmos de processamento de visualização do MySQL, incluindo MERGE
, TEMPTABLE
e UNDEFINED
.
As instruções CREATE VIEW
e ALTER VIEW
possuem uma cláusula opcional: ALGORITHM
. O algoritmo determina como o MySQL processa uma visualização e pode assumir um dos três valores MERGE
, TEMPTABLE
e UNDEFINE
.
Aqui está a CREATE VIEW
declaração com a ALGORITHM
cláusula:
CREATE [OR REPLACE][ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] VIEW
view_name[(column_list)]
AS
select-statement;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
E esta é a ALTER VIEW
declaração com a ALGORITHM
cláusula:
CREATE [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] VIEW
view_name[(column_list)]
AS
select-statement;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MERGE
Quando você consulta a partir de uma MERGE
visualização, o MySQL processa as seguintes etapas:
- Primeiro, mescle a consulta de entrada com a
SELECT
instrução na definição da visualização em uma única consulta. - Em seguida, execute a consulta combinada para retornar o conjunto de resultados.
Observe que a combinação da consulta de entrada e a SELECT
declaração da definição da visualização em uma única consulta é chamada de resolução da visualização .
Veja o seguinte customers
no banco de dados de exemplo :
A instrução a seguir cria uma visualização baseada na customers
tabela com o nome contactPersons
do MERGE
algoritmo:
CREATE ALGORITHM=MERGE VIEW contactPersons(
customerName,
firstName,
lastName,
phone
) AS
SELECT
customerName,
contactFirstName,
contactLastName,
phone
FROM customers;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que você emita a seguinte declaração:
SELECT * FROM contactPersons
WHERE customerName LIKE '%Co%';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MySQL executa estas etapas:
- Converta o nome da visualização
contactPersons
em nome da tabelacustomers
. - Converta askterisk (*) em uma lista de nomes de colunas
customerName
,firstName
,lastName
,phone
, que corresponde acustomerName
,contactFirstName
,contactLastName
,phone
. - Adicione a
WHERE
cláusula.
A declaração resultante é:
SELECT
customerName,
contactFirstName,
contactLastName,
phone
FROM
customers
WHERE
customerName LIKE '%Co%';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
TEMPTABLE
Quando você emite uma consulta para uma TEMPTABLE
visualização, o MySQL executa estas etapas:
- Primeiro, crie uma tabela temporária para armazenar o resultado
SELECT
na definição da visualização. - Em seguida, execute a consulta de entrada na tabela temporária.
Como o MySQL precisa criar a tabela temporária para armazenar o conjunto de resultados e mover os dados das tabelas base para a tabela temporária, o algoritmo TEMPTABLE
é menos eficiente que o MERGE
algoritmo.
Observe que TEMPTABLE
as visualizações não podem ser atualizáveis .
UNDEFINED
Este UNDEFINED
é o algoritmo padrão quando você cria uma visualização sem especificar a ALGORITHM
cláusula ou especifica explicitamente ALGORITHM=UNDEFINED
.
Além disso, quando você cria uma visualização ALGORITHM = MERGE
e o MySQL só pode processar a visualização com uma tabela temporária, o MySQL define automaticamente o algoritmo UNDEFINED
e gera um aviso.
O UNDEFINED
permite que o MySQL escolha MERGE
ou TEMPTABLE
. E o MySQL prefere, MERGE
se TEMPTABLE
possível, porque MERGE
geralmente é mais eficiente que o TEMPTABLE
.
Neste tutorial, você aprendeu sobre os algoritmos de processamento de visualização do MySQL, incluindo MERGE
, TEMPTABLE
e UNDEFINED
.