Ordem de execução da instrução SELECT no SQL

Em relação à ordem de execução da instrução Select no Sql, pouca atenção tem sido dada a esse problema, e o uso de palavras-chave também é muito casual. Quanto à questão da eficiência

, pois a quantidade de dados na tabela não é muito grande, então não me preocupo muito com isso. Ao escrever uma instrução hoje, execute-a no analisador de consultas

Demora 10s, mas leva menos de 1s para mudar para outra forma de escrita.Meu colega disse que é por causa da ordem em que as sentenças SQL são executadas. eu vi um pouco antes

O livro de Guan, tenho uma pequena impressão, encontrei informações na Internet e estudei.

Etapas de processamento de consulta lógica

(8)SELECT (9)DISTINCT
(11)<TOP_specification> <select_list>
(1)FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4)WHERE <where_condition>
(5) )GROUP BY <group_by_list>
(6)WITH {CUBE | ROLLUP}
(7)HAVING <havendo_condição>
(10)ORDER BY <order_by_list>


Cada etapa produz uma tabela virtual que é usada como entrada para a próxima etapa. Somente a tabela gerada pela última etapa é retornada ao chamador. como

Se não houver cláusula, a etapa correspondente será ignorada.

1. FROM: O produto cartesiano é executado nas duas primeiras tabelas na cláusula FROM para gerar a tabela virtual VT1.

2. ON: Aplique o filtro ON ao VT1. Somente as linhas para as quais <join_condition> é verdadeiro são inseridas no VT2.

3. OUTER(JOIN): Se OUTER JOIN for especificado, nenhuma linha correspondente encontrada na tabela reservada será adicionada a VT2 como linhas externas para gerar VT3.

Se a cláusula FROM contiver mais de duas tabelas, repita as etapas 1 a 3 para a tabela de resultados produzida pela junção anterior e a próxima tabela até

até que todas as tabelas sejam processadas.

4. Aplique o filtro WHERE a VT3. Apenas as linhas que tornam <where_condition> TRUE são inseridas em VT4.

5. GROUP BY: Agrupe as linhas em VT4 pela lista de colunas na cláusula GROUP BY para gerar VT5.

6. CUBE|ROLLUP: Insira o supergrupo em VT5 para gerar VT6.

7. HAVING: Aplique o filtro HAVING ao VT6. Somente grupos com <havendo_condição> TRUE serão inseridos no VT7.

8. SELECT: processa a lista SELECT e gera VT8.

9. DISTINCT: Remova linhas duplicadas de VT8 para gerar VT9.

10. ORDER BY: Classifique as linhas em VT9 de acordo com a lista de colunas na cláusula ORDER BY para gerar uma tabela (VC10).

11. TOP: Selecione o número especificado ou a proporção de linhas desde o início de VC10, gere a tabela VT11 e retorne ao chamador.


Acho que você gosta

Origin blog.csdn.net/susieweijs/article/details/5660593
Recomendado
Clasificación