none
Precedência de condições na cláusula WHERE RRS feed

  • Pergunta

  • Boa tarde pessoal! Todos bem por ai?

    Me ocorreu uma dúvida. Existe alguma boa prática para a sequência dos argumentos na cláusula WHERE?

    Por exemplo:

    DECLARE
    	@ano CHAR(4), @mes CHAR(2)
    SELECT
    	@ano = '2022', @mes = '06'
    SELECT
    	chave_fato,
    	descricao,
        num_docto,
    	cod_cli_for,
    	nome_cadastro,
    	CONVERT(CHAR, data_v2, 103) AS data_v2,
    	desc_produto_nf,
    	FORMAT(valor_total, 'n', 'pt-br') AS valor_total,
    	FORMAT(valor_liquido, 'n', 'pt-br') AS valor_liquido,
    	FORMAT(valor_liquido_item, 'n', 'pt-br') AS valor_liquido_item
    FROM vwMovtoSaida
    WHERE
    	YEAR(data_v2) = @ano AND MONTH(data_v2) = @mes
    	AND status_ctb = 'S'
    	AND cod_tipo_mv IN ('T524','520','528','523','T534')
    	AND cod_filial IN ('100')
    ORDER BY
    	data_v2 ASC

    Faz diferença a ordem dos argumentos nas condições WHERE?



    quarta-feira, 21 de setembro de 2022 16:13

Todas as Respostas

  • Boa tarde!

    Por tentativa e análise, me parece que as cláusulas mais restritivas em primeiro lugar, rodam mais rápido.

    segunda-feira, 26 de setembro de 2022 18:24
  • Flávio,

    Normalmente recomenda-se tanto no Where como também no Order By, declarar inicialmente as condições ou colunas de menor volume de dados para depois estabelecer o uso das colunas maiores.

    Neste seu caso eu declararia inicialmente as colunas numéricas, depois colunas de data e por fim as colunas caracteres.

    Em relação ao uso das funções para manipulação de datas, eu evitaria utilizar as mesmas na cláusula where, pois desta forma você acaba forçando o SQL Server ter que analisar novamente o plano de execução pode já ter sido definido antes da execução da query.

    Além disso, declare as variáveis Ano e Mes como Int e TinyInt respectivamente assim o SQL Server não terá a necessidade de fazer mais uma conversão implícita dos dados.


    Pedro Antonio Galvão Junior [MSc. | MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    terça-feira, 27 de setembro de 2022 16:58