Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Katalog pełnotekstowy i autouzupełnianie programu SQL Server

Mój wstępny komentarz, Zakładam, że imię i nazwisko komputera jest podobne do FirstName + ' ' + LastName -- czy możesz ustawić imię w zapytaniu jak 'Carl%' i nazwisko jak 'Gari%' miał na celu zbieranie informacji. Dziękuję za odpowiedź.

Nie próbowałem tego sam (i ma to znaczenie tylko w twoim środowisku), ale możesz dodać podobne klauzule do zapytania opartego na zawartości i porównać plany zapytań z wersją zawierającą.

Istnieją 3 możliwe zapytania, oczywiste zapytania

A Contains version -- your existing query
A Like Version -- as I commented
A Combined version -- using like and contains

Nie sądzę, że masz rację, używając wyszukiwania pełnego indeksu, które zawsze jest szybsze niż wersja LIKE, ponieważ myślę, że prawidłowa odpowiedź jest taka, to zależy.

Jeśli masz indeksy na nazwisko (lub też na imię), wersja „podobna” powinna wykonać indeksowane wyszukiwanie. Będzie to zależało od rozmieszczenia kluczy i procentu dopasowania. Np. wyszukiwanie nazwiska, takiego jak „G%” i imienia, takiego jak „Carl%” niż „Gari%” i „Carl%”, byłoby znacznie wolniejsze, jeśli indeks byłby tylko na nazwisko. Tak więc, jeśli masz wystarczająco długie klucze wyszukiwania, wersja LIKE będzie prawdopodobnie szybsza niż wersja zawierająca. Będziesz musiał przetestować, aby wiedzieć, co na pewno działa najlepiej.

Może się okazać, że wersja kombinowana jest zawsze najlepszym wyborem lub przynajmniej wystarczająco dobra. Ale zdecydowanie spróbowałbym tego najpierw przed zastosowaniem poniższej strategii.

Ogólna strategia, którą proponuję, to:

Przestań korzystać z wyszukiwania przyrostowego, dopóki użytkownik nie wpisze co najmniej kilku znaków — prawdopodobnie płacisz za to znaczną część wydajności, ponieważ nie ma to prawie żadnej rzeczywistej wartości dla użytkowników Twojej witryny. Proponujemy nie przeprowadzać wyszukiwania przyrostowego przed wprowadzeniem co najmniej 3 znaków. Ponieważ nie wspomniałeś, że już wymagasz minimalnej liczby znaków przed wyszukiwaniem przyrostowym.

Jeśli jest to zawetowane, zastosuj tę samą podstawową strategię, ale nie wywołuj wyszukiwania przyrostowego, dopóki nie upłynie NN milisekund od ostatniego wpisanego znaku lub liczby znaków> pewna długość. W rzeczywistości, ponieważ niektóre nazwiska mają tylko 2 znaki, w rzeczywistości musisz użyć tej strategii.

Podobnie nie przeprowadzałbym w ogóle żadnego wyszukiwania przyrostowego, niezależnie od długości, o ile użytkownik szybko wprowadza nowe znaki, aby uniknąć zmarnowanych wyszukiwań, których użytkownik nie używa.

O ile połączone zapytanie nie jest zawsze wystarczająco dobre, Miej dwa różne zapisane procesy na swoim serwerze, aby przekazać wyniki wyszukiwania, jeden jest wersją podobną, a drugi wersją zawierającą. Wywołaj wersję, która ma uzyskać najlepsze wyniki w zależności od tego, jaka część nazwy została podana.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieoczekiwane wyniki CTE

  2. T-SQL:sprawdzanie formatu wiadomości e-mail

  3. Serwer SQL . Alias ​​nie działa

  4. Idealna burza do uaktualnienia do nowoczesnej wersji SQL Server

  5. DAY() Przykłady w SQL Server (T-SQL)