Frage

Also, ich habe einen Autocomplete-Drop-Down mit einer Liste von Gemeinden. Ich hatte zunächst nur die 20 oder so, dass wir in der Datenbank hatten ... aber in letzter Zeit haben wir festgestellt, dass einige unsere Daten in anderen Landkreis liegen ... auch andere Staaten. So war die Antwort auf, dass eine dieser Datenbanken kaufen mit allen Städten in den USA (ja, ich weiß, Geokodierung ist die Antwort aber aus Zeitgründen wir dies tun, bis wir Zeit für diese Funktion haben).

Wenn wir also 20-25 Städte die zum automatischen Vervollständigung gearbeitet hatten stellarly ... nun, dass es 80.000 ist es ist nicht so einfach.

Als ich tippe ich denke, dass der beste Weg, dies zu tun, ist standardmäßig auf diesen Zustand, dann wird es viel weniger sein. Ich werde einen Zustand Wähler auf der Seite hinzufügen, die standardmäßig auf NJ, dann können Sie einen anderen Zustand holen, wenn nötig, wird dies auf die Liste eingrenzen <1000. Obwohl, kann ich das gleiche Problem haben? Kennt jemand eine Arbeit um für eine Autovervollständigung mit vielen Daten?

sollte ich teh codez meiner webservice posten?

War es hilfreich?

Lösung

Sind Sie versuchen, automatisch zu vervollständigen, nachdem nur 1 Zeichen eingegeben wird? Vielleicht warten, bis 2 oder mehr ...?

Sie können aber auch nur die Top 10 Zeilen zurück, oder was?

Andere Tipps

Klingt wie Ihre Anwendung auf die Datenmenge, erstickend zurückgegeben wird, und versucht dann vom Browser gerendert werden.

Ich gehe davon aus, dass die Datenbank die richtigen Indizes hat, und Sie müssen nicht auf ein Leistungsproblem dort haben.

würde ich die Ergebnisse Ihrer Dienstleistung beschränken, um nicht mehr als 100 Ergebnisse sagen. Die Benutzer werden nicht jeder mehr sehen als jeder, wie.

Ich würde auch nur die Daten aus dem Dienst werden einmal 2 oder 3 Zeichen eingegeben abrufen, die weiter den Umfang der Abfrage reduzieren.

Good Luck!

Dumme Frage vielleicht, aber ... haben Sie sicherstellen überprüfen Sie einen Index für die Ortsnamen-Spalte? Ich würde denken, nicht 80K Namen sollten Sie Ihre Datenbank der Schwerpunkt auf ...

Ich glaube, Sie auf dem richtigen Weg sind. Verwenden Sie eine Reihe von Cascading Eingängen, Bundesland -> County -> Township, wo jeder nachfolgend man die potentiellen Bevölkerungs greift basierend auf dem Wert der vorhergehenden. Jeder Eingang würde validieren gegen seine potentielle Bevölkerungs unechte Eingänge zu vermeiden. Ich würde die Zwischenergebnisse deuten darauf hin, Caching und für die die automatische Vervollständigung gegen sie abfragt, anstatt den ganzen Weg zurück in die Datenbank jedes Mal.

Wenn Sie die Kontrolle über die zugrunde liegenden SQL haben, möchten Sie vielleicht mehrere „UNION“ Abfragen statt einer Abfrage mit mehreren „OR wie“ Linien in seiner where-Klausel.

, um zu versuchen

Schauen Sie sich diesem Artikel auf SQL zu optimieren.

Ich würde nur die SQL-Abfrage mit einer TOP-Klausel begrenzen. Ich mag auch mit einem „kleiner als“ anstelle eines wie:

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

, dass "Ce" geben Sie "Cedar Grove" und "Cedar Knolls", sondern auch "Chatham" & "Cherry Hill", so dass Sie immer zehn bekommen.

In LINQ:

var q = (from c in db.Cities
        where partialname < c.Name
        orderby c.Name
        select c.Name).Take(10);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top