Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Catálogo de texto completo e preenchimento automático do SQL Server


Meu comentário inicial, presumo que o nome completo do computador seja algo semelhante a FirstName + ' ' + LastName -- você pode fazer a consulta firstname como 'Carl%' e lastname como 'Gari%' pretendia reunir informações. Obrigado por responder.

Eu não tentei isso sozinho (e isso só importa com o seu ambiente), mas você pode adicionar as cláusulas semelhantes à consulta baseada em conteúdo e comparar os planos de consulta com a versão de conteúdo.

Existem 3 consultas possíveis consultas óbvias
A Contains version -- your existing query
A Like Version -- as I commented
A Combined version -- using like and contains

Eu não acho que você esteja necessariamente certo sobre o uso da pesquisa de índice completo sempre ser mais rápido que a versão LIKE, porque acho que a resposta correta é depende.

Se você tiver índices no sobrenome (ou primeiro nome também), a versão "like" deve fazer uma pesquisa indexada. Dependerá de sua distribuição de chaves e qual porcentagem corresponde. Ou seja, pesquisar por sobrenome como 'G%' e primeiro nome como 'Carl%' do que 'Gari%' e 'Carl%' seria muito mais lento se indexar apenas no sobrenome. Portanto, se você tiver chaves de pesquisa suficientemente longas, a versão LIKE provavelmente será mais rápida do que a versão contém. Você terá que testar para saber o que funciona melhor com certeza.

Pode ser que a versão combinada seja sempre a melhor escolha ou pelo menos boa o suficiente. Mas eu definitivamente tentaria isso primeiro antes de seguir a estratégia abaixo.

A estratégia geral que eu sugiro é:

Pare de usar a pesquisa incremental até que o usuário tenha digitado pelo menos alguns caracteres - você provavelmente está pagando muito pelo desempenho atingido por fazer isso, pois quase não tem valor real para os usuários do seu site. Como sugestão, não faça pesquisa incremental antes de inserir pelo menos 3 caracteres. Como você não mencionou que já exige caracteres mínimos antes da pesquisa incremental.

Se isso for vetado, a mesma estratégia básica, mas você não invoca a pesquisa incremental até que NN milissegundos tenham passado desde o último caractere digitado ou o número de caracteres digitados> algum comprimento. Na verdade, como alguns sobrenomes têm apenas 2 caracteres, você precisa usar essa estratégia na realidade.

Da mesma forma, eu não faria nenhuma pesquisa incremental, independentemente do tamanho, desde que o usuário estivesse inserindo rapidamente novos caracteres para evitar pesquisas desperdiçadas que o usuário não está usando.

A menos que a consulta combinada seja sempre boa o suficiente, tenha dois procs armazenados diferentes em seu servidor para devolver os resultados da pesquisa, um sendo a versão semelhante e o outro a versão contém. Chame a versão esperada para obter os melhores resultados dependendo de quanto do nome foi fornecido.