Sortowanie kolumny VARCHAR(2500)

Załóżmy, że mamy tabelę z kolumną typu VARCHAR(2500), a w niej sporo wierszy. Wynik zapytania z tej tabeli chcielibyśmy posortować według wspomnianej kolumny. Oczywiście będzie to bardzo czasochłonne, a tym samym słabo wydajne. Jak sobie z tym poradzić?

Zapytanie tego typu przy 100 tysiącach wierszy, na mojej wysłużonej maszynie, wykonywało się 28 sekund. Pierwsza myśl, jaka wpadła mi do głowy, to założyć na kolumnę indeks. Niestety jak już wspominałem tutaj, maksymalny dopuszczalny rozmiar indeksu to 900 bajtów. Tym samym, niemożliwe staje się stworzenie indeksu opartego o tą kolumnę i konieczne jest znalezienie innego rozwiązania. Dodałem/założyłem więc kolumnę wyliczeniową (computed column), której nadałem wartość pierwszej kolumny skróconej do 500 znaków.

ALTER TABLE t1
ADD short_value AS (SUBSTRING(value, 0, 500))

Po tej zmianie moje zapytanie sortowałem w oparciu o kolumnę ze skróconą wartością, co skutecznie poprawiło wynik, skracając go do 12 sekund.
Idąc dalej tym tropem, mogłem założyć w tym momencie indeks na kolumnę ze skróconą wartością i tak też zrobiłem.

CREATE INDEX IX_t1_short_value ON t1 (short_value)

Czas mojego zapytania to jedna sekunda.
Należy jednak wspomnieć o tym, iż po stworzeniu powyższego indeksu wielkość bazy danych nieco zwiększyła się, co jest rzeczą naturalną.

Promuj

Facebook
Twitter
LinkedIn
Google+
http://kurzyniec.pl/artykuly/sort-varchar/

Leave a Reply

Your email address will not be published. Required fields are marked *