Az SQL Server teljesítményhangolás gyakorlati workshopja során nemrég kaptam egy kérdést, amely a Trim és az LTRIM/RTRIM funkció teljesítményének összehasonlításával kapcsolatos.
A trim funkcióval kapcsolatban korábban már írtam a következő blogbejegyzésben, és kérem, hogy olvassa el azt, mielőtt folytatja a bemutatót ebből a blogból.
- SQL SERVER – TRIM funkció a karakterlánc vezető és követő szóközeinek eltávolítására – SQL in Sixty Seconds #040 – Video
- SQL SERVER – 2008 – Enhanced TRIM() Function – Remove Trailing Spaces, Leading Spaces, White Space, Tabs, Carriage Returns, Line Feeds
- SQL SERVER – 2008 – TRIM() függvény – Felhasználó által definiált függvény
- SQL SERVER – TRIM() függvény – UDF TRIM()
- SQL SERVER – 2017 – Hogyan távolítsuk el a vezető és követő szóközöket a TRIM függvénnyel?
- SQL SERVER – A TRIM függvény teljesítményének megfigyelése
Ne kezdjük egy egyszerű példával, ahol az LTRIM/RTRIM és az SQL Serverben újonnan bevezetett TRIM függvény teljesítményét fogjuk összehasonlítani
-- 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
A teszt során három select utasításunk van, ahol a két esetben az LTRIM/RTRIM, valamint a TRIM függvényt használjuk. Hasonlítsuk össze a teljesítményt azzal a select utasítással, ahol nem használtunk semmilyen függvényt a WHERE záradékban.
Teljesen egyértelmű, hogy ha a WHERE záradékban használt oszlopra bármilyen függvényt használunk, akkor biztosan rossz teljesítményt fogunk elérni.