Domanda

Quindi, ho un menu a discesa con completamento automatico con un elenco di comuni. Inizialmente avevo appena avuto i 20 circa che avevamo nel database ... ma recentemente abbiamo notato che alcuni dei nostri dati si trovano in altre contee ... persino in altri stati. Quindi, la risposta è stata quella di acquistare uno di quei database con tutte le città degli Stati Uniti (sì, lo so, il geocodifica è la risposta, ma a causa di vincoli di tempo lo stiamo facendo fino a quando non avremo tempo per quella funzione).

Quindi, quando avevamo 20-25 città, il completamento automatico funzionava in modo straordinario ... ora che ci sono 80.000 non è così facile.

Mentre scrivo, penso che il modo migliore per farlo sia quello predefinito in questo stato, quindi ci sarà molto meno. Aggiungerò un selettore di stato alla pagina che per impostazione predefinita è NJ, quindi puoi scegliere un altro stato, se necessario, questo restringerà l'elenco a & Lt; 1000. Tuttavia, potrei avere lo stesso problema? Qualcuno è a conoscenza di una soluzione per un completamento automatico con molti dati?

dovrei pubblicare il codez del mio servizio web?

È stato utile?

Soluzione

Stai cercando di completare automaticamente dopo aver digitato solo 1 carattere? Forse aspetti fino a 2 o più ...?

Inoltre, puoi semplicemente restituire le prime 10 righe o qualcosa del genere?

Altri suggerimenti

Sembra che l'applicazione stia soffocando sulla quantità di dati restituiti, quindi ha tentato di essere renderizzata dal browser.

Suppongo che il tuo database abbia gli indici corretti e che tu non abbia un problema di prestazioni lì.

Vorrei limitare i risultati del tuo servizio a non più di dire 100 risultati. Gli utenti non guarderanno più di così in alcun modo.

Vorrei anche recuperare i dati dal servizio solo dopo aver inserito 2 o 3 caratteri, il che ridurrà ulteriormente l'ambito della query.

Buona fortuna!

Forse stupida domanda, ma ... hai controllato per assicurarti di avere un indice nella colonna del nome della città? Non penso che i nomi di 80K dovrebbero stressare il tuo database ...

Penso che tu sia sulla strada giusta. Utilizzare una serie di ingressi in cascata, Stato - & Gt; Contea - & Gt; Township in cui ciascuno successivo prende la popolazione potenziale in base al valore di quello precedente. Ogni input verificherebbe contro la sua popolazione potenziale per evitare input spuri. Suggerirei di memorizzare nella cache i risultati intermedi e di eseguire una query su di essi per il completamento automatico invece di tornare ogni volta fino al database.

Se hai il controllo dell'SQL sottostante, potresti provare diversi " UNION " query anziché una query con più " OPPURE come " righe nella clausola where.

Consulta questo articolo sull'ottimizzazione di SQL.

Limiterei la query SQL con una clausola TOP. Mi piace anche usare un & Quot; meno di & Quot; invece di un like:

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

che " Ce " ti darà " Cedar Grove " e " Cedar Knolls " ma anche " Chatham " & Amp; " Cherry Hill " quindi ne ottieni sempre dieci.

In LINQ:

var q = (from c in db.Cities
        where partialname < c.Name
        orderby c.Name
        select c.Name).Take(10);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top