Recentemente, vi a pergunta "onde 1 = 1 instrução" ; uma construção SQL que usei frequentemente na construção de SQL dinâmico em um esforço para escrever um código mais limpo (da perspectiva da linguagem do host).
De um modo geral, essa adição a uma instrução SQL afeta negativamente o desempenho da consulta? Não estou procurando uma resposta em relação a um sistema de banco de dados específico (porque o usei em DB2, SQL Server, MS-Access e mysql) - a menos que seja impossível responder sem entrar em detalhes.
Todos os principais RDBMS, até onde eu sei, construíram avaliações constantes. Isso deve ser avaliado instantaneamente em qualquer um deles.
De uma perspectiva do SQL Server, se você estiver fazendo o
WHERE 1=1
possível para permitir a passagem dinâmica de parâmetros e ignorar a avaliação de um parâmetro, sugiro que leia alguns artigos do SQL Server MV Erland Sommarskog. Sua abordagem elimina a necessidade de fazer alguns outros truques dentro do SQL dinâmico (como aWHERE Column = Column
construção ou o uso de umaWHERE (Col = Val OR 1=1) and (Col2 = Val2 OR 1=1)
construção). O 1 = 1 não deve causar problemas de desempenho como @JNK mencionou (marquei a resposta dele com +1 e essa é a que deve ser aceita), acho que você encontrará algumas boas dicas no artigo de Erland por aí SQL dinâmico e você também verá que ele ainda usa aquele1=1
para os casos em que nenhum parâmetro é passado, mas ele os evita para parâmetros individuais que não são passados, ele simplesmente nãoCom o MySQL, você pode verificar, executando EXPLAIN EXTENDED e depois SHOW WARNINGS para ver a consulta real. tl;dr: ele é otimizado.