sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Fuldtekstkatalog og Autofuldførelse

Min indledende kommentar, Jeg antager, at computerens fulde navn er noget, der ligner Fornavn + ' ' + Efternavn -- kan du lave forespørgslen fornavn som 'Carl%' og efternavn som 'Gari%' havde til formål at indsamle information. Tak fordi du svarede.

Jeg har ikke prøvet dette selv (og det betyder kun noget med dit miljø), men du kan tilføje lignende klausuler til den indeholder-baserede forespørgsel og sammenligne forespørgselsplanerne med indeholder-versionen.

Der er 3 mulige forespørgsler, åbenlyse forespørgsler

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

Jeg tror ikke, at du nødvendigvis har ret i at bruge fuldindekssøgning altid er hurtigere end LIKE-versionen, for jeg tror, ​​det rigtige svar er, det afhænger af det.

Hvis du har indekser på efternavnet (eller også fornavnet), bør "synes godt om"-versionen lave et indekseret opslag. Det vil afhænge af din fordeling af nøgler og hvilken procentdel match. Dvs., søgning efter efternavn som 'G%' og fornavn som 'Carl%' end 'Gari%' og 'Carl%' ville være meget langsommere, hvis kun indeksering på efternavn. Så hvis du har tilstrækkeligt lange søgenøgler, vil LIKE-versionen sandsynligvis være hurtigere end den indeholder versionen. Du bliver nødt til at teste for at vide, hvad der virker bedst.

Det kan være, at den kombinerede version altid er det bedste valg eller i det mindste god nok. Men jeg ville bestemt prøve dette først, før jeg følger strategien nedenfor.

Den overordnede strategi, jeg vil foreslå, er:

Stop med at bruge trinvis søgning, indtil brugeren har indtastet mindst et par tegn - du betaler sandsynligvis en stor del af præstationshittet for at gøre det, da det næsten ikke har nogen reel værdi for brugerne af dit websted. Som et forslag skal du ikke lave trinvis søgning, før de indtaster mindst 3 tegn. Da du ikke nævnte, at du allerede kræver minimumstegn før inkrementel søgning.

Hvis dette nedlægges med veto, samme grundlæggende strategi, men du påberåber dig ikke den trinvise søgning, før der er gået NN millisekunder siden sidste tegn, der blev indtastet, eller taltegn indtastet> en vis længde. Faktisk, da nogle efternavne kun er 2 tegn, er du stort set nødt til at bruge denne strategi i virkeligheden.

Ligeledes ville jeg slet ikke lave nogen trinvis søgning uanset længde, så længe brugeren hurtigt indtaster nye tegn for at undgå spildte søgninger, som brugeren ikke bruger.

Medmindre den kombinerede forespørgsel altid er god nok, skal du have to forskellige lagrede procs på din server til at aflevere søgeresultater, den ene er den samme version, den anden er den indeholder versionen. Kald den version, der forventes for at få de bedste resultater afhængigt af, hvor meget af navnet, der blev angivet.




  1. sammenligne to markører i oracle i stedet for at bruge MINUS

  2. php og mysql - Send afkrydsningsfelt, alternativknap og rullemenuresultater fra bruger til mysql-database og gem det der

  3. Oracle skelner ikke mellem nul og tomme strenge?

  4. MariaDB JSON_KEYS() Forklaret