Pregunta

Entonces, tengo un menú desplegable de autocompletar con una lista de municipios. Inicialmente solo tenía los 20 o más que teníamos en la base de datos ... pero recientemente, nos hemos dado cuenta de que algunos de nuestros datos se encuentran en otros condados ... incluso en otros estados. Entonces, la respuesta a eso fue comprar una de esas bases de datos con todas las ciudades de los EE. UU. (Sí, lo sé, la geocodificación es la respuesta, pero debido a las limitaciones de tiempo lo estamos haciendo hasta que tengamos tiempo para esa función).

Entonces, cuando teníamos 20-25 ciudades, el autocompletado funcionaba de manera estelar ... ahora que hay 80,000 no es tan fácil.

Mientras escribo, pienso que la mejor manera de hacerlo es por defecto a este estado, entonces habrá mucho menos. Agregaré un selector de estado a la página que por defecto es NJ, luego puede elegir otro estado si es necesario, esto reducirá la lista a & Lt; 1000. Sin embargo, ¿puedo tener el mismo problema? ¿Alguien sabe de una solución alternativa para un autocompletado con muchos datos?

¿debo publicar el codez de mi servicio web?

¿Fue útil?

Solución

¿Está tratando de autocompletar después de escribir solo 1 carácter? ¿Quizás esperar hasta 2 o más ...?

Además, ¿puede devolver las 10 primeras filas, o algo así?

Otros consejos

Parece que su aplicación se está asfixiando con la cantidad de datos que se devuelven, y luego intentó ser procesada por el navegador.

Supongo que su base de datos tiene los índices adecuados y no tiene un problema de rendimiento allí.

Limitaría los resultados de su servicio a no más de 100 resultados. Los usuarios no mirarán más que eso de ninguna manera.

También solo recuperaría los datos del servicio una vez que se ingresen 2 o 3 caracteres, lo que reducirá aún más el alcance de la consulta.

¡Buena suerte!

Pregunta estúpida tal vez, pero ... ¿has verificado para asegurarte de que tienes un índice en la columna del nombre de la ciudad? No creo que los nombres de 80K deberían estresar su base de datos ...

Creo que estás en el camino correcto. Utilice una serie de entradas en cascada, Estado - & Gt; Condado - & Gt; Municipio donde cada uno de los siguientes agarra la población potencial en función del valor del precedente. Cada entrada validaría contra su población potencial para evitar entradas espurias. Sugeriría almacenar en caché los resultados intermedios y consultar en su contra el autocompletado en lugar de volver a la base de datos cada vez.

Si tiene control del SQL subyacente, puede probar varias " UNION " consultas en lugar de una consulta con varias " O como " líneas en su cláusula where.

Consulte este artículo sobre la optimización de SQL.

Simplemente limitaría la consulta SQL con una cláusula TOP. También me gusta usar un & Quot; menor que & Quot; en lugar de un me gusta:

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

que " Ce " te dará " Cedar Grove " y " Cedar Knolls " pero también " Chatham " & amp; " Cherry Hill " así que siempre obtienes diez.

En LINQ:

var q = (from c in db.Cities
        where partialname < c.Name
        orderby c.Name
        select c.Name).Take(10);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top