sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server Full Text Catalog och Autocomplete

Min första kommentar, Jag antar att datorns fullständiga namn är något som liknar Förnamn + ' ' + Efternamn -- kan du göra frågan förnamn som 'Carl%' och efternamn som 'Gari%' var tänkt att samla in information. Tack för att du svarade.

Jag har inte provat det här själv (och det spelar bara roll med din miljö), men du kan lägga till liknande klausuler till den innehåller-baserade frågan och jämföra frågeplanerna med innehåller-versionen.

Det finns 3 möjliga frågor uppenbara frågor

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

Jag tror inte att du nödvändigtvis har rätt om att använda fullindexsökning alltid är snabbare än LIKE-versionen, eftersom jag tror att det korrekta svaret är, det beror på.

Om du har index på efternamnet (eller förnamnet också), bör "gilla"-versionen göra en indexerad sökning. Det beror på din fördelning av nycklar och vilken procentandel som matchar. Dvs, sökning efter efternamn som "G%" och förnamn som "Carl%" än "Gari%" och "Carl%" skulle vara mycket långsammare om indexering endast på efternamn. Så om du har tillräckligt långa söknycklar kommer LIKE-versionen troligen att vara snabbare än versionen som innehåller. Du måste testa för att säkert veta vad som fungerar bäst.

Det kan vara så att den kombinerade versionen alltid är det bästa valet eller åtminstone tillräckligt bra. Men jag skulle definitivt prova detta först innan jag följer strategin nedan.

Den övergripande strategin jag skulle föreslå är:

Sluta använda inkrementell sökning tills användaren har skrivit in minst några tecken -- du betalar troligen mycket av prestationsträffen för att göra det eftersom det nästan inte har något verkligt värde för användarna av din webbplats. Som ett förslag, gör inte inkrementell sökning innan de har skrivit in minst 3 tecken. Eftersom du inte nämnde att du redan kräver minsta antal tecken innan inkrementell sökning.

Om detta är nedlagt veto, samma grundläggande strategi, men du anropar inte den inkrementella sökningen förrän NN millisekunder har förflutit sedan det senaste tecknet skrevs eller siffertecken> någon längd. Faktum är att eftersom vissa efternamn bara består av två tecken, måste du i stort sett använda denna strategi i verkligheten.

På samma sätt skulle jag inte göra någon inkrementell sökning alls oavsett längd så länge användaren snabbt skriver in nya tecken för att undvika bortkastade sökningar som användaren inte använder.

Såvida inte den kombinerade frågan alltid är tillräckligt bra, ha två olika lagrade processer på din server för att lämna tillbaka sökresultat, en är den liknande versionen, den andra är versionen innehåller. Ring den version som förväntas för att få bästa resultat beroende på hur mycket av namnet som angavs.




  1. MySQL:subquerys ELLER fackföreningar?

  2. JSON_REPLACE() – Ersätt värden i ett JSON-dokument i MySQL

  3. AUTO_INCREMENT och LAST_INSERT_ID

  4. jämföra datum med ett fördefinierat format pl sql