SQL Server – Toimintojen Trim ja LTRIM(RTRIM)suorituskyvyn vertailu

Luovuttaessani SQL Serverin suorituskyvyn virittämisen käytännön työpajaa sain hiljattain kysymyksen, joka liittyy toimintojen Trim ja LTRIM/RTRIM suorituskyvyn vertailuun.

Trim-funktiosta olen kirjoittanut aiemmin blogin seuraavassa blogikirjoituksessa ja pyydän lukemaan sen, ennen kuin jatkat esittelyä tästä blogista.

  • SQL SERVER – TRIM-funktio merkkijonon etu- ja jälkimmäisten välilyöntien poistamiseksi – SQL in Sixty Seconds #040 – Video
  • SQL SERVER – 2008 – Enhanced TRIM()-funktio – Poista jälkimmäiset välilyönnit, etummaiset välilyönnit, valkoiset välilyönnit, välilehdet, Carriage Returns, Line Feeds
  • SQL SERVER – 2008 – TRIM()-funktio – Käyttäjän määrittelemä funktio
  • SQL SERVER – TRIM()-funktio – UDF TRIM()
  • SQL SERVER – 2017 – Kuinka poistaa johtavat ja seuraavat välilyönnit TRIM-funktiolla?
  • SQL SERVER – TRIM-funktion suorituskyvyn havainnointi

Aloitetaanpa yksinkertaisella esimerkillä, jossa vertaamme LTRIM/RTRIM-funktion suorituskykyä TRIM-funktioon, joka on hiljattain otettu käyttöön SQL Serverissä

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

Testin aikana meillä on kolme select-lauseketta, joissa kahdessa tapauksessa käytämme LTRIM/RTRIM- sekä TRIM-funktiota. Verrataanpa suorituskykyä samaan select-lauseeseen, jossa emme ole käyttäneet mitään funktiota WHERE-lausekkeessa.

SQL Server - Funktion Trim ja LTRIM(RTRIM) trimperf suorituskykyvertailu

SQL Server - Funktion Trim ja LTRIM(RTRIM) trimperf suorituskykyvertailu

On selvää, että jos käytämme WHERE-lausekkeessa käytettyyn sarakkeeseen mitä tahansa funktiota, suorituskyky heikkenee väistämättä.