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.
On selvää, että jos käytämme WHERE-lausekkeessa käytettyyn sarakkeeseen mitä tahansa funktiota, suorituskyky heikkenee väistämättä.