SQL Server – porovnání výkonu funkcí Trim a LTRIM(RTRIM)

Při pořádání praktického semináře o ladění výkonu SQL Serveru jsem nedávno obdržel dotaz, který se týkal porovnání výkonu funkcí Trim a LTRIM/RTRIM.

Ohledně funkce trim jsem již dříve psal v následujícím příspěvku na blogu a žádám vás, abyste si jej přečetli před pokračováním ukázky z tohoto blogu.

  • SQL SERVER – Funkce TRIM pro odstranění předních a zadních mezer v řetězci – SQL za šedesát sekund #040 – Video
  • SQL SERVER – 2008 – Vylepšená funkce TRIM() – odstranění zadních mezer, předních mezer, bílých míst, tabelátorů, Carriage Returns, Line Feeds
  • SQL SERVER – 2008 – Funkce TRIM() – Uživatelsky definovaná funkce
  • SQL SERVER – Funkce TRIM() – UDF TRIM()
  • SQL SERVER – 2017 – Jak odstranit vodící a koncové mezery pomocí funkce TRIM?
  • SQL SERVER – Pozorování výkonu funkce TRIM

No začneme jednoduchým příkladem, kde budeme porovnávat výkon LTRIM/RTRIM s funkcí TRIM, která je nově zavedena v SQL Serveru

-- 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

Nyní při testu máme tři příkazy select, kde ve dvou případech používáme LTRIM/RTRIM i funkci TRIM. Porovnejme jejich výkon s příkazem select, kde jsme v klauzuli WHERE nepoužili žádnou funkci.

SQL Server - Porovnání výkonu funkce Trim a LTRIM(RTRIM) trimperf

SQL Server - Porovnání výkonu funkce Trim a LTRIM(RTRIM) trimperf

Je zcela zřejmé, že pokud použijeme jakoukoli funkci na sloupec použitý v klauzuli WHERE, určitě dostaneme nízký výkon.

.