Performance

SQL Server – Como evitar funções na cláusula WHERE para performance

Saiba como melhorar a performance ao evitar funções na cláusula WHERE do SQL Server

 

O SQL Server oferece muitas funções úteis que podem ser usadas na cláusula SELECT ou na cláusula WHERE. Para a maior parte dessas funções o SQL fornece codificações complexas que seria muito difícil obter essa mesma funcionalidade sem essas funções. Além das funções do SQL Server nativas, você também tem a capacidade de desenvolver suas próprias funções. Quando as funções são usadas na cláusula SELECT para retornar a saída maiúscula, uma substring ou qualquer outra coisa, ela não afeta muito o desempenho, mas quando as funções são usadas incorretamente na cláusula WHERE, essas funções podem causar problemas de desempenho.

Quando as funções são usadas na cláusula SELECT, a função deve ser executada com cada valor de dados para retornar os resultados corretos. Isso pode não ser uma coisa ruim se você está apenas retornando poucas linhas de dados. Mas quando essas mesmas funções são usadas na cláusula WHERE isso força o SQL Server para fazer uma varredura de tabela ou varredura de índice para obter os resultados corretos em vez de fazer um índice seek que pode ser usado. A razão para isto é que o valor da função tem de ser avaliado para cada linha de dados para determinar se corresponde aos seus critérios.

Abaixo vou mostrar a vocês alguns exemplos que ocorrem quando fazemos isso.

Esse teste foi feito na versão do SQL Server 2014 na base de dados Adventureworks2014:

Este primeiro exemplo usa a função LEFT para obter os dois primeiros caracteres do endereço de e-mail. Uma vez feito isso, cada linha é avaliada para ver se ela corresponde aos critérios. O EmailAddress é indexado, portanto, o SQL Server opta por ler todo o índice de procurar encontrar os dados.

SELECT EmailAddress 
FROM person.EmailAddress 
WHERE left(EmailAddress,2) = 'As'

Outra versão dessa mesma consulta que retorna os mesmos resultados usa a cláusula LIKE em vez disso. Esta consulta usa a cláusula like para obter todos os dados que começa com “As”. Como há um índice na coluna EmailAddress, o SQL Server pode fazer uma busca de índice seek que é muito mais eficiente do que uma verificação de índice scan.

SELECT EmailAddress 
FROM person.EmailAddress 
WHERE EmailAddress LIKE 'As%'

Aqui está outro exemplo onde a cláusula UPPER é usada para transformar o endereço de e-mail em letras maiúsculas antes de avaliar os dados. Novamente o endereço de e-mail é indexado.

SELECT EmailAddress 
FROM person.EmailAddress
WHERE upper(EmailAddress) like 'AS%'

Uma segunda versão desta consulta novamente apenas usa a cláusula LIKE para obter os mesmos resultados porém fazendo uso do índice seek.

SELECT EmailAddress 
FROM person.EmailAddress
WHERE EmailAddress like 'AS%'

Aqui está outro exemplo onde a função DateDiff é usada. A função está obtendo linhas onde a diferença em minutos entre o ModifiedDate e a função getdate () é maior que zero, a coluna ModifiedDate é indexada.

SELECT ModifiedDate 
FROM person.Person
WHERE datediff(minute,ModifiedDate,getdate())>0

Nesta versão estamos apenas fazendo uma comparação direta de ModifiedDate em relação ao getdate (). O cenário de índice mais uma vez faz seek na leitura.

SELECT ModifiedDate 
FROM person.Person 
WHERE ModifiedDate < getdate()

 

 

SQL Server – Como evitar funções na cláusula WHERE para performance
The following two tabs change content below.

Wesley Mota

DBA SQL Server
Profissional graduado em Banco de Dados e Sistemas de Informação com mais de 7 anos de experiência em empresas de software. Certificado MCSA Microsoft SQL Server possui intensa vivência em administração de banco de dados, Tunning, Performance SQL Server, levantamento de melhorias e monitoramento de banco de dados e servidores SQL Server. Consultoria SQL Server em diversos clientes no Brasil e ao redor do mundo. Escritor no blog dbasqlserverbr.com.br/blog. Onde compartilha conhecimento, experiências e dicas de performance para DBAs SQL Server. Conhecimentos em Oracle e ambientes de alta disponibilidade. Desenvolvimento de softwares web e mobile.Gerenciamento de equipe e projetos.

Latest posts by Wesley Mota (see all)

Wesley Mota

Profissional graduado em Banco de Dados e Sistemas de Informação com mais de 7 anos de experiência em empresas de software. Certificado MCSA Microsoft SQL Server possui intensa vivência em administração de banco de dados, Tunning, Performance SQL Server, levantamento de melhorias e monitoramento de banco de dados e servidores SQL Server. Consultoria SQL Server em diversos clientes no Brasil e ao redor do mundo. Escritor no blog dbasqlserverbr.com.br/blog. Onde compartilha conhecimento, experiências e dicas de performance para DBAs SQL Server. Conhecimentos em Oracle e ambientes de alta disponibilidade. Desenvolvimento de softwares web e mobile.Gerenciamento de equipe e projetos.

Share
Published by
Wesley Mota

Recent Posts

Free Blackjack No Download: Appreciate Blackjack Anytime, Anywhere

Blackjack, additionally known as twenty-one, is just one of one of the most popular gambling…

4 semanas ago

The Ultimate Guide to Gry Online Ruletka

If you are a fan of online gambling, then you must have come across gry…

1 mês ago

Discover the Adventures of Free Spins at Online Casino Sites

On the internet online casinos have transformed the betting industry, enabling players to vegas.hu online…

7 meses ago

Best Free Spins No Deposit

Casinos online offer free spins to draw new customers. These bonuses are usually very profitable,…

8 meses ago

Ideal Online Port Gambling Enterprises: An Overview to Locating the Perfect Pc Gaming Experience

In recent times, online casino sites have actually obtained enormous appeal among gamers, providing a…

8 meses ago

Best Online Casinos That Accept Bitcoin Down Payments

Bitcoin, the most preferred cryptocurrency worldwide, has reinvented lots of industries, including the on baixar…

8 meses ago