Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Пълен текстов каталог на SQL Server и автоматично попълване

Първоначалният ми коментар, Предполагам, че пълното име на компютъра е нещо подобно на FirstName + ' ' + LastName -- можете ли да направите заявката собствено име като 'Carl%' и фамилно име като 'Gari%' имаше за цел да събере информация. Благодаря за отговора.

Аз самият не съм пробвал това (и има значение само за вашата среда), но можете да добавите подобни клаузи към базираната на съдържа заявка и да сравните плановете на заявката с съдържащата версия.

Има 3 възможни заявки очевидни заявки

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

Не мисля, че сте непременно прав за това, че използването на търсене в пълен индекс винаги е по-бързо от версията LIKE, защото мисля, че правилният отговор е, зависи.

Ако имате индекси на фамилното име (или собственото име също), версията „харесвам“ трябва да направи индексирано търсене. Това ще зависи от вашето разпределение на ключовете и какъв процент съвпадение. Т.е. търсенето на фамилно име като 'G%' и собствено име като 'Carl%' отколкото 'Gari%' и 'Carl%' ще бъде много по-бавно, ако се индексира само по фамилно име. Така че, ако имате достатъчно дълги ключове за търсене, версията LIKE вероятно ще бъде по-бърза от версията съдържа. Ще трябва да тествате, за да разберете какво работи най-добре със сигурност.

Може да се окаже, че комбинираната версия винаги е най-добрият избор или поне достатъчно добра. Но определено бих опитал първо това, преди да следвам стратегията по-долу.

Общата стратегия, която бих предложил, е:

Спрете да използвате инкрементално търсене, докато потребителят не въведе поне няколко знака - вероятно плащате голяма част от удара на производителността за това, тъй като няма почти никаква реална стойност за потребителите на вашия уебсайт. Като предложение, не правете постепенно търсене, преди да въведат поне 3 знака. Тъй като не споменахте, че вече изисквате минимум знаци преди постепенното търсене.

Ако това е наложено вето, същата основна стратегия, но не извиквате постепенното търсене, докато не изтекат NN милисекунди от последния въведен знак или въведени числови знаци> някаква дължина. Всъщност, тъй като някои фамилни имена са само 2 знака, почти трябва да използвате тази стратегия в действителност.

По същия начин не бих извършил никакво постепенно търсене, независимо от дължината, стига потребителят да въвежда бързо нови знаци, за да избегне напразни търсения, които потребителят не използва.

Освен ако комбинираната заявка винаги е достатъчно добра, имайте две различни съхранени процедури на вашия сървър, за да върнете резултатите от търсенето, като едната е подобна версия, другата е съдържаща версия. Извикайте версията, за която се очаква да получи най-добри резултати в зависимост от това каква част от името е предоставено.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Динамичен SQL и оптимизация на съхранена процедура

  2. SQL Server 2008 - създаване на скрипт за база данни (схема + данни) с команден ред

  3. Съхраняване на високосна секунда в SQL Server 2008

  4. Експортирайте таблица във файл със заглавки на колони (имена на колони) с помощта на помощната програма bcp и SQL Server 2008

  5. T-SQL групиране на редове в колони