Esta é uma pergunta simples para a qual não consigo encontrar a resposta.
Em termos de desempenho, se eu tiver uma WHERE
cláusula como a=0 and b=0 and ... z=0
, eu obteria algum desempenho se substituísse essa condição por a+b+...+z=0
?
Em outras palavras, há algum ganho de desempenho substituindo o seguinte
Select *
From MyTable
Where A=0 and B=0 and C=0 and D=0...
Com
Select *
From MyTable
Where A+B+C+D=0...
Sei que pode depender de índices, mas, para esse fim, digamos que não existam índices. O operador aritmético (+) funciona melhor que um operador lógico "OU" ou "E"?
Tenho a impressão de que a adição funciona melhor do que várias condições com ANDs ou ORs.
Resultado dos testes
Em uma tabela de 4,2 milhões de linhas
Retornando linhas Onde A=0 B=0 e C=0 -> 351748 Linhas
A adição (A+B+C=0) levou 5 segundos, enquanto as condições lógicas A=0 e B=0 e C=0 levaram 11 segundos.
Por outro lado
Retornando linhas Onde A<>0 B<>0 ou C<>0 -> 3829750 Linhas 58 segundos
Retornando linhas Onde F65+ F67+f64<>0 -> 3829750 Linhas 57 segundos
Para o OR, parece que não há diferença significativa.
Concordo com gbn:
Se A é -1 e B é 1, A+B=0 mas A=0 e B= 0 é falso
e com AMtwo:
ABS(A)+ABS(B)+ABS(C)+ABS(D)... Mesmo que você espere apenas valores positivos, se a coluna aceitar valores negativos, você deve presumir que poderá encontrar um
Os resultados são muito impressionantes, como pensei, parece que a adição é muito mais rápida que os operadores lógicos.
A = Float, B = Dinheiro e C = Float. A consulta utilizada é a mostrada. No meu caso, todos são números positivos. Sem índices. É lógico em minha mente que a adição seja mais rápida do que as condições lógicas!