Apresentando o SQL Server Performance Tuning Practical Workshop eu recentemente recebi uma pergunta que está relacionada à comparação de performance de Function Trim e LTRIM/RTRIM.
Regarding the trim function, eu já bloguei anteriormente no seguinte post do blog e solicito que você leia o mesmo antes de continuar a demonstração deste blog.
- SQL SERVER – Função TRIM para Remover Espaços à Líderes e Trailing Spaces of String – SQL em Sessenta Segundos #040 – Video
- SQL SERVER – 2008 – Função TRIM() Aprimorada – Remove Trailing Spaces, Leading Spaces, White Space, Tabs, Retornos de Carro, Alimentação de Linha
- SQL SERVER – 2008 – Função TRIM() – Função Definida pelo Usuário
- SQL SERVER – TRIM() Função – UDF TRIM()
- SQL SERVER – 2017 – Como Remover Espaços de Líderes e Trailing com a Função TRIM?
- SQL SERVER – Observação de Desempenho da Função TRIM
Noe vamos começar com um exemplo simples onde vamos comparar o desempenho do LTRIM/RTRIM com a função TRIM que é introduzida recentemente no SQL Server
-- Create a sample tableCREATE TABLE Test (ID INT, Col1 CHAR(100))GOSET NOCOUNT ONINSERT Test (ID, Col1)VALUES (1,' a ')GO 1000INSERT Test (ID, Col1)VALUES (1,' b ')GO-- Create a nonclustered indexCREATE NONCLUSTERED INDEX IX_Test_Col1 ON Test (Col1);GO-- SELECT TESTSELECT IDFROM TestWHERE LTRIM(RTRIM(Col1)) = 'b'GOSELECT IDFROM TestWHERE TRIM(Col1) = 'b'GOSELECT IDFROM TestWHERE Col1 = ' b 'GO-- cleanupDROP TABLE TestGO
Agora durante o teste, temos três instruções de seleção onde nos dois casos estamos usando LTRIM/RTRIM, bem como a função TRIM. Vamos comparar o desempenho do mesmo com a instrução select onde não utilizamos nenhuma função na cláusula WHERE.
Está muito claro que se utilizarmos qualquer função na coluna utilizada na cláusula WHERE estamos obrigados a obter uma performance pobre.