|
Przeszukiwanie pełnotekstowe
Przeszukiwanie pełnotekstowe zastosowane w SQL Server 2000 to znakomity sposób na zwiększenie wydajności operacji wyszukiwania
w przypadku gdy mamy do czynienia z tabelą o sporej ilości wierszy, w których są dane tekstowe znacznych rozmiarów. Na przykład jeśli mamy
tabelę o 10000 wierszy i w każdym z nich jest średnio 20 kB tekstu to wyszukiwanie w takim przypadku za pomocą klauzuli LIKE '%wyszukiwane_słowo%'
może być bardzo kosztowne. Jeśli dodatkowo mamy do czynienia ze środowiskiem, w którym z bazą łączy się jednocześnie wielu użytkowników (środowisko WWW) to zastosowanie
indeksów pełnotekstowych może być koniecznością. Tradycyjne przeszukiwanie za pomocą konstrukcji LIKE przypomina przeglądanie
wszystkich stron książki w poszukiwaniu danego słowa, podczas gdy wyszukiwanie pełnotekstowe to wyszukiwanie w skorowidzu książki.
Tworzenie indeksu
Tworzenie indeksu jest operacją bardzo kosztowną dlatego należy ją przeprowadzać w czasie minimalnego obciążenia serwera np w nocy (tworzenie lub odbudowę takiego indeksu można zaplanować jako zadanie SQL Server Agenta). Proces ten można przeprowadzać na dwa sposoby: całkowite tworzenie indeksu (full population) i przyrostowe (incremental population). Całkowite tworzenie
indeksu oznacza jego zbudowanie od nowa. Operacja ta może trwać nawet 30 min (dla tabeli o wspomnianej wcześniej wielkości). Przy odbudowie przyrostowej dokonywane są tylko te
zmiany, które zaszły w zmienionych wierszach. W takim schemacie jeśli dane w tabeli są często aktualizowane to wyniki wyszukiwania będą zawsze trochę
przekłamane. Wyjściem jest wywoływanie co jakiś czas odbudowy przyrostowej indeksu. Można tego dokonać poprzez wywołanie odpowiedniej procedury
składowanej:
EXEC sp_fulltext_catalog 'nazwa_katalogu', 'start_full'
Słowa - szum
Jest to specyficzny dla każdego języka zestaw słów, który pojawia się tekstach. Słowa te takie jak np.: który, że, na, pod ,albo nie są wyszukiwane i usunięcie ich z indeksu
może zwiększyć wydajność takiego wyszukiwania. Lista słów dla każdego obsługiwanego języka znajduje się w specjalnym pliku tekstowym umiejscowionym
w katalogu SQL Servera. Jeśli w danej kopii SQL Servera nie ma obsługi danego języka to wybieramy "Neutral". W wersji 2005 SQL Servera znajduje się już dołączona obsługa
języka polskiego dla wyszukiwania pełnotekstowego. O ile mi wiadomo dołączenie obsługi nowego języka wymaga (oprócz utworzenia pliku ze słowami-szumem) modyfikacji w rejestrze
systemowym.
Zapytania SQL wyszukujące w indeksie kontra tradycyjne zapytania
Tradycyjne zapytanie wyszukujące posiada następującą budowę:
SELECT kolumna FROM tabela WHERE kolumna LIKE '%szukane_slowo%' ;
Wyszukiwanie z wykorzystaniem indeksu pełnotekstowego może wyglądać następująco:
SELECT kolumna FROM tabela WHERE CONTAINS(kolumna,'wyszukiwane_slowo');
Funkcja CONTAINS jako drugi argument akceptuje także wyrażenia logiczne np.:
SELECT kolumna FROM tabela WHERE CONTAINS(kolumna_1,' "slowo_1" AND "slowo_2" ');
W tym przykładzie pokazane zostaną wszystkie te wiersze, które w kolumnie kolumna_1 posiadają
słowo_1 i słowo_2.
Wykorzystanie rankingu przy wyszukiwaniu pełnotekstowym
W SQL Server istnieje specjalna funkcja CONTAINSTABLE() zwracająca zbiór danych składający się z dwóch kolumn.
Pierwsza z nich to wartości klucza głównego a druga to pozycja w rankingu. Funkcję CONTAINSTABLE() można w zapytaniach
traktować jako tabelę:
SELECT * FROM CONTAINSTABLE(tabela1,kolumna1,' "slowo" ')
|
|
|