Question

J'ai donc une liste déroulante à remplissage automatique avec une liste de cantons. Au début, je ne disposais que d'une vingtaine de fois dans la base de données ... mais récemment, nous avons remarqué que certaines de nos données se trouvaient dans d'autres pays ... même dans d'autres États. La réponse à cette question a donc été d'acheter l'une de ces bases de données avec toutes les villes des États-Unis (oui, je sais, le géocodage est la solution, mais en raison de contraintes de temps, nous le faisons jusqu'à ce que nous ayons le temps de le faire.)

Ainsi, lorsque nous avions 20 ou 25 villes, la saisie semi-automatique fonctionnait parfaitement ... maintenant qu'il y en a 80 000, ce n'est plus aussi facile.

Au fur et à mesure que je tape, je pense que la meilleure façon de procéder consiste à adopter cet état par défaut. Il y en aura bien moins. J'ajouterai un sélecteur d'état à la page dont la valeur par défaut est NJ. Vous pouvez en choisir un autre si nécessaire. La liste sera alors réduite à & Lt; 1000. Bien que je puisse avoir le même problème? Est-ce que quelqu'un connaît un moyen de contourner un autocomplétion avec beaucoup de données?

devrais-je publier le code de mon service Web?

Était-ce utile?

La solution

Essayez-vous de compléter automatiquement la saisie après avoir saisi un seul caractère? Peut-être attendre 2 ou plus ...?

Aussi, pouvez-vous simplement renvoyer les 10 premières lignes, ou quelque chose d'autre?

Autres conseils

On dirait que votre application étouffe la quantité de données renvoyée, puis que le navigateur a tenté de la rendre.

Je suppose que votre base de données contient les index appropriés et que vous n’y rencontrez aucun problème de performances.

Je limiterais les résultats de votre service à pas plus de 100 résultats. Les utilisateurs ne regarderont pas plus que cela.

Je voudrais également récupérer les données du service une fois que 2 ou 3 caractères sont entrés, ce qui réduira encore la portée de la requête.

Bonne chance!

Question stupide peut-être, mais ... avez-vous vérifié pour vous assurer que vous avez un index sur la colonne du nom de la ville? Je ne pense pas que les noms 80K devraient mettre votre base de données en évidence ...

Je pense que vous êtes sur la bonne voie. Utilisez une série d’entrées en cascade, State - & Gt; Comté - & Gt; Canton où chaque successeur s'empare de la population potentielle en fonction de la valeur du précédent. Chaque entrée serait validée par rapport à sa population potentielle pour éviter les intrants parasites. Je suggérerais de mettre en cache les résultats intermédiaires et d’interroger ces derniers pour la saisie semi-automatique au lieu de retourner chaque fois dans la base de données.

Si vous avez le contrôle sur le SQL sous-jacent, vous pouvez essayer plusieurs " UNION " requêtes au lieu d'une requête avec plusieurs " OU comme " lignes dans sa clause where.

Consultez cet article sur l'optimisation de SQL.

Je limiterais simplement la requête SQL avec une clause TOP. J'aime aussi utiliser un & Quotient inférieur à & Quot; au lieu d'un comme:

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

que " Ce " vous donnera & "Cedar Grove &"; et " Cedar Knolls " mais aussi " Chatham " & amp; " Cherry Hill " de sorte que vous obtenez toujours dix.

Dans LINQ:

var q = (from c in db.Cities
        where partialname < c.Name
        orderby c.Name
        select c.Name).Take(10);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top