En animant l’atelier pratique d’optimisation des performances de SQL Server, j’ai récemment reçu une question qui est liée à la comparaison des performances de la fonction Trim et LTRIM/RTRIM.
En ce qui concerne la fonction trim, j’ai précédemment blogué dans le billet suivant et je vous demande de lire le même avant de poursuivre la démonstration à partir de ce blog.
- SQL SERVER – Fonction TRIM pour supprimer les espaces de début et de fin de chaîne – SQL en soixante secondes #040 – Vidéo
- SQL SERVER – 2008 – Fonction TRIM() améliorée – Suppression des espaces de fin, des espaces de début, des espaces blancs, des tabulations, retours chariot, sauts de ligne
- SQL SERVER – 2008 – Fonction TRIM() – Fonction définie par l’utilisateur
- SQL SERVER – Fonction TRIM() – UDF TRIM()
- SQL SERVER – 2017 – Comment supprimer les espaces de début et de fin avec la fonction TRIM ?
- SQL SERVER – Observation des performances de la fonction TRIM
Nous allons commencer par un exemple simple où nous allons comparer les performances de LTRIM/RTRIM avec la fonction TRIM qui est nouvellement introduite dans 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
Maintenant pendant le test, nous avons trois déclarations select dans lesquelles les deux cas nous utilisons LTRIM/RTRIM ainsi que la fonction TRIM. Comparons les performances de la même chose avec l’instruction select où nous n’avons utilisé aucune fonction dans la clause WHERE.
Il est très clair que si nous utilisons n’importe quelle fonction sur la colonne utilisée dans la clause WHERE, nous sommes voués à obtenir de mauvaises performances.