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

Catalogo full-text di SQL Server e completamento automatico

Il mio commento iniziale, Presumo che il nome completo del computer sia qualcosa di simile a FirstName + ' ' + LastName -- puoi fare la query nome come 'Carl%' e cognome come 'Gari%' aveva lo scopo di raccogliere informazioni. Grazie per aver risposto.

Non l'ho provato io stesso (e conta solo con il tuo ambiente), ma potresti aggiungere le clausole simili alla query basata su contiene e confrontare i piani di query con la versione contiene.

Ci sono 3 possibili query query ovvie

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

Non penso che tu abbia necessariamente ragione sull'utilizzo della ricerca a indice completo sempre più veloce della versione LIKE, perché penso che la risposta corretta sia, dipende.

Se hai indici sul cognome (o anche sul nome), la versione "mi piace" dovrebbe eseguire una ricerca indicizzata. Dipenderà dalla distribuzione delle chiavi e dalla percentuale di corrispondenza. Ad esempio, la ricerca di cognome come "G%" e nome come "Carl%" rispetto a "Gari%" e "Carl%" sarebbe molto più lenta se l'indice fosse solo sul cognome. Quindi, se hai chiavi di ricerca sufficientemente lunghe, la versione LIKE sarà probabilmente più veloce della versione contiene. Dovrai testare per sapere cosa funziona meglio di sicuro.

Può darsi che la versione combinata sia sempre la scelta migliore o almeno abbastanza buona. Ma lo proverei sicuramente prima di seguire la strategia di seguito.

La strategia generale che suggerirei è:

Smetti di usare la ricerca incrementale fino a quando l'utente non ha digitato almeno alcuni caratteri:probabilmente stai pagando molto del calo delle prestazioni per farlo, poiché non ha quasi alcun valore reale per gli utenti del tuo sito web. Come suggerimento, non eseguire ricerche incrementali prima di aver inserito almeno 3 caratteri. Dal momento che non hai menzionato che hai già bisogno di caratteri minimi prima della ricerca incrementale.

Se questo è posto il veto, stessa strategia di base, ma non invochi la ricerca incrementale fino a quando non sono trascorsi NN millisecondi dall'ultimo carattere digitato o dal numero di caratteri digitati> una certa lunghezza. In effetti, poiché alcuni cognomi sono solo 2 caratteri, devi praticamente usare questa strategia nella realtà.

Allo stesso modo, non farei alcuna ricerca incrementale indipendentemente dalla lunghezza, purché l'utente immetta rapidamente nuovi caratteri per evitare ricerche sprecate che l'utente non sta utilizzando.

A meno che la query combinata non sia sempre abbastanza buona, disporre di due diversi processi memorizzati sul server per restituire i risultati della ricerca, uno è la versione simile, l'altro è la versione contiene. Chiama la versione che dovrebbe ottenere i migliori risultati a seconda di quanto del nome è stato fornito.