Witam.
Postawiłem sobie bazę w której między innymi mam tabele 'słowa' składającą się kolumn: id bigint, NAME nchar(60), wprowadził nchar(10).
W tabeli znajduje się 3 500 000 słów polskich.
Chciałbym najwydajniej jak się da przeszukiwać ją szukając np. podpowiedzi do błędnie napisanego słowa (coś jak mechanizm sprawdzania pisowni w MS Wordzie).
np. dla niepoprawnego słowa 'kotex' chciałbym dowiedzieć się, że istnieją podpowiedzi:
kotek, kotem, kotew...
Narazie zastosowałem najprostrzy algorytm szukania podpowiedzi, czyli
wymieniam pierwsz literę wyrazu czyli 'k' na kolejne litery alfabetu i sprawdzam czy istnieje w tabeli.
czyli 'Aotex', Botex, Cotex... nie trudno się domyślić, że możliwych kombinacji będzie
długość_alfabetu x długość_słowa. I tyle samo zapytań będę miał.
O ile pojedyńcze zapytanie wykonuje mi się błyskawicznie, o tyle 120 zapytań już nie koniecznie ;)
SELECT [SLOWNIK].[dbo].[SLOWA].[NAME]
FROM [SLOWNIK].[dbo].[SLOWA]
WHERE [SLOWNIK].[dbo].[SLOWA].[NAME] = 'śmotex';
Oczywiście założyłem indeks na pole NAME; Unique, non-clustrered.
Chcialbym o poradę jak mogę dostroić bazę i zapytania aby uzyskać najlepszy efekt.
Próbowałem teraz wykorzystać polecenia z LIKE:
select * from slowa
where RTRIM(name) LIKE 'kote[a-z]';
ale to trwa strasznie długo.
Proszę o pomoc.
|