sql >> Base de Datos >  >> RDS >> Sqlserver

Catálogo de texto completo de SQL Server y Autocompletar

Mi comentario inicial, Supongo que el nombre completo de la computadora es algo similar a Nombre + ' ' + Apellido. ¿Puede hacer la consulta nombre como 'Carl%' y apellido como 'Gari%'? tenía la intención de recopilar información. Gracias por responder.

No lo he intentado yo mismo (y solo importa con su entorno), pero podría agregar las cláusulas similares a la consulta basada en contiene y comparar los planes de consulta con la versión contiene.

Hay 3 consultas posibles consultas obvias

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

No creo que tengas necesariamente razón en que el uso de la búsqueda de índice completo siempre es más rápido que la versión LIKE, porque creo que la respuesta correcta es, depende.

Si tiene índices en el apellido (o el nombre también), la versión "me gusta" debería hacer una búsqueda indexada. Dependerá de tu distribución de claves y de qué porcentaje coinciden. Es decir, buscar un apellido como 'G%' y un nombre como 'Carl%' que 'Gari%' y 'Carl%' sería mucho más lento si se indexara solo con el apellido. Por lo tanto, si tiene claves de búsqueda lo suficientemente largas, la versión LIKE probablemente será más rápida que la versión contiene. Tendrás que probar para saber qué funciona mejor con seguridad.

Puede que la versión combinada sea siempre la mejor opción o al menos lo suficientemente buena. Pero definitivamente probaría esto primero antes de seguir la estrategia a continuación.

La estrategia general que sugeriría es:

Deje de usar la búsqueda incremental hasta que el usuario haya ingresado al menos algunos caracteres; es probable que esté pagando una gran parte del rendimiento por hacerlo, ya que casi no tiene valor real para los usuarios de su sitio web. Como sugerencia, no realice una búsqueda incremental antes de que ingresen al menos 3 caracteres. Dado que no mencionó que ya requiere caracteres mínimos antes de la búsqueda incremental.

Si esto está vetado, la misma estrategia básica, pero no invoque la búsqueda incremental hasta que transcurran NN milisegundos desde el último carácter ingresado o el número de caracteres ingresados ​​​​> cierta longitud. De hecho, dado que algunos apellidos tienen solo 2 caracteres, prácticamente tienes que usar esta estrategia en la realidad.

Del mismo modo, no haría ninguna búsqueda incremental, independientemente de la longitud, siempre que el usuario ingrese rápidamente nuevos caracteres para evitar búsquedas desperdiciadas que el usuario no está usando.

A menos que la consulta combinada siempre sea lo suficientemente buena, tenga dos procesos almacenados diferentes en su servidor para devolver los resultados de la búsqueda, uno que sea la versión similar y el otro la versión que contiene. Llame a la versión esperada para obtener los mejores resultados según la cantidad del nombre que se proporcionó.