Pergunta

Então, eu tenho uma lista suspensa autocomplete com uma lista de municípios. Inicialmente eu só tinha 20 ou assim que tivemos no banco de dados ... mas recentemente, temos notado que alguns dos nossos mentiras de dados em outros países ... até mesmo outros estados. Assim, a resposta para isso foi comprar um desses bancos de dados com todas as cidades nos EUA (sim, eu sei, geocodificação é a resposta, mas devido às limitações de tempo estamos fazendo isso até que tenhamos tempo para esse recurso).

Assim, quando tivemos 20-25 cidades do autocomplete trabalhou stellarly ... agora que há 80.000 que não é tão fácil.

Enquanto digito Estou a pensar que a melhor maneira de fazer isso é padrão para este estado, em seguida, haverá muito menos. Vou adicionar um seletor de estado para a página que o padrão é NJ então você pode escolher um outro estado se for necessário, isso vai diminuir a lista de <1000. Embora, eu possa ter o mesmo problema? Alguém sabe de um trabalho em torno de um autocomplete com um monte de dados?

Eu deveria postar teh codez do meu webservice?

Foi útil?

Solução

Você está tentando autocomplete depois de apenas 1 caractere é digitado? Talvez esperar até 2 ou mais ...?

Além disso, você pode simplesmente retornar o top 10 linhas, ou algo assim?

Outras dicas

Parece que a sua aplicação é sufocante sobre a quantidade de dados a serem devolvidos, e depois tentou ser processado pelo navegador.

Eu supor que seu banco de dados tem os índices adequados, e você não tem um problema de desempenho lá.

gostaria de limitar os resultados de seu serviço para não mais que digamos 100 resultados. Os usuários não vão olhar para mais do que isso de qualquer forma.

Eu também sendo apenas recuperar os dados do serviço uma vez 2 ou 3 caracteres são inseridos o que irá reduzir ainda mais o âmbito da consulta.

Boa sorte!

Pergunta estúpida, talvez, mas ... você tem verificado para se certificar de que você tem um índice na coluna nome da cidade? Eu não pensaria 80K nomes deve ser salientando o seu banco de dados ...

Eu acho que você está no caminho certo. Utilize uma série de entradas em cascata, Estado -> County -> Township onde cada um sucesso agarra a população potencial com base no valor do precedente. Cada entrada iria validar contra sua população potencial para evitar entradas espúrias. Gostaria de sugerir cache os resultados intermediários e consultando contra eles para o autocomplete em vez de ir todo o caminho de volta para o banco de dados de cada vez.

Se você tem o controle do SQL subjacente, você pode querer experimentar vários "união" consultas em vez de uma consulta com vários "ou como" linhas em sua cláusula onde.

Confira este artigo na otimização de SQL.

Eu tinha acabado de limitar a consulta SQL com uma cláusula TOP. Eu também gosto de usar um "menor que" em vez de um, como:

select top 10 name from cities where @partialname < name order by name;

que "Ce" lhe dará "Cedar Grove" e "Cedar Knolls", mas também "Chatham" e "Cherry Hill", de modo que você sempre terá dez.

Em LINQ:

var q = (from c in db.Cities
        where partialname < c.Name
        orderby c.Name
        select c.Name).Take(10);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top