Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A ordem das condições em uma cláusula WHERE afeta o desempenho do MySQL?


Aqui está uma demonstração mostrando a ordem das condições da cláusula WHERE podem fazer a diferença devido ao curto-circuito. Ele executa as seguintes consultas:
-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;

-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;

A única diferença entre eles é a ordem dos operandos no OR doença.

myslowfunction dorme deliberadamente por um segundo e tem o efeito colateral de adicionar uma entrada a uma tabela de log cada vez que é executado. Aqui estão os resultados do que é registrado ao executar as duas consultas:
myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4

O acima mostra que uma função lenta é executada mais vezes quando aparece no lado esquerdo de um OR condição quando o outro operando nem sempre é verdadeiro.

Então IMO a resposta para a pergunta:

é "Às vezes pode fazer."