Nota de Migração: Este artigo foi migrado para o Portal Wiki em Português. O conteúdo será atualizado aqui http://social.technet.microsoft.com/wiki/pt-br/contents/articles/12567.dica-cuidado-com-or.aspx.


Sempre que possível substituir condições com OR por UNION ALL

Vamos criar um ambiente para testar esta dica:

CREATE TABLE #Produto (
   ID Int Identity(1,1),
   NomeProduto varchar(500)
)
GO
 
INSERT INTO #Produto VALUES(NEWID())
GO 1000
 
CREATE CLUSTERED INDEX IX_ProdutoId ON #Produto(ID)
GO
 
CREATE INDEX IX_ProdutoNome ON #Produto(NomeProduto)
GO

Agora vamos fazer duas consultas, uma utilizando o OR e outra utilizando o UNION ALL.

SELECT * FROM #Produto
WHERE ID=10 OR NomeProduto Like '38%'
 
SELECT * FROM #Produto
WHERE ID = 10
UNION ALL
SELECT * FROM #Produto
WHERE NomeProduto Like '38%'

Ao utilizar o OR, percebemos que ele utiliza um Scan(mais lento) . 



Ozimar Henrique
http://ozimar.com