Ordem das condições em mysql onde cláusulas e performance
Ao criar consultas de banco de dados complexas com inúmeras condições, a ordem dessas condições pode impactar potencialmente o MYSQL Performance. Um cenário comum envolve uma combinação de condições amplas e restritivas. Surge a pergunta: importa se a condição restritiva aparece primeiro ou pela última vez na cláusula WHERE?
A resposta nem sempre é direta. Em certas situações, a ordem pode afetar o desempenho devido ao comportamento de curto-circuito. Considere as seguintes consultas:
SELECT * FROM clients WHERE (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND company = :ugh
SELECT * FROM clients WHERE company = :ugh AND (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar)
Na primeira consulta, a condição da empresa é verificada por último, potencialmente fazendo com que o MySQL pesquise em um grande número de linhas antes de diminuir os resultados. Na segunda consulta, a condição da empresa é avaliada primeiro, o que pode reduzir significativamente o número de linhas que precisam ser processadas. Se a condição da empresa falhar para uma determinada linha, o MySQL não continuará a avaliar as condições restantes para essa linha. Não é uma regra geral que possa ser aplicada em todos os casos. É melhor realizar testes de desempenho em consultas específicas para determinar se a reordenação das condições fornece alguma melhoria perceptível.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3