Автозаполнение Dropdown - слишком много данных, тайм-аут
Вопрос
Итак, у меня есть выпадающий список автозаполнения со списком населенных пунктов. Первоначально у меня было только 20 или около того, что у нас было в базе данных ... но недавно мы заметили, что некоторые из наших данных находятся в других округах ... даже в других штатах. Таким образом, ответом на это была покупка одной из этих баз данных со всеми городами США (да, я знаю, геокодирование - это ответ, но из-за нехватки времени мы делаем это, пока у нас нет времени для этой функции). Р>
Итак, когда у нас было 20-25 городов, автозаполнение работало безукоризненно ... теперь, когда их 80 000, это не так просто. Р>
Когда я печатаю, я думаю, что лучший способ сделать это по умолчанию в этом состоянии, тогда будет гораздо меньше. Я добавлю на страницу селектор состояний, который по умолчанию установлен в Нью-Джерси, затем вы можете выбрать другое состояние, если это необходимо, это сузит список до & Lt; 1000. Хотя у меня может быть такая же проблема? Кто-нибудь знает об обходе автозаполнения с большим количеством данных? Р>
я должен опубликовать кодекс моего веб-сервиса?
Решение
Вы пытаетесь выполнить автозаполнение после ввода только 1 символа? Может, подождать до 2 или более ...?
Кроме того, вы можете просто вернуть первые 10 строк или что-то в этом роде?
Другие советы
Похоже, ваше приложение задыхается от объема возвращаемых данных, а затем пытается их отобразить в браузере.
Я предполагаю, что ваша база данных имеет правильные индексы, и у вас нет проблем с производительностью там.
Я бы ограничил результаты вашего обслуживания не более, чем 100 результатами. Пользователи не будут смотреть на что-либо еще.
Я бы также извлекал данные из службы только после ввода 2 или 3 символов, что еще больше уменьшит объем запроса.
Удачи!
Может быть, глупый вопрос, но ... проверили ли вы наличие индекса в столбце названия города? Я бы не подумал, что имена в 80 тыс. Должны подчеркивать вашу базу данных ...
Я думаю, что вы на правильном пути. Используйте серию каскадных входов, State - & Gt; Округ - & Gt; Городок, в котором каждый последующий захватывает потенциальное население на основе стоимости предыдущего. Каждый вход будет проверяться на предмет потенциальной совокупности, чтобы избежать ложных входов Я бы предложил кэшировать промежуточные результаты и запрашивать у них автоматическое заполнение вместо того, чтобы каждый раз возвращаться к базе данных.
Если у вас есть контроль над базовым SQL, вы можете попробовать несколько " UNION " запросы вместо одного запроса с несколькими " ИЛИ like " строки в предложении where.
Ознакомьтесь с этой статьей по оптимизации SQL. Р>
Я бы просто ограничил SQL-запрос предложением TOP. Мне также нравится использовать & Quot; меньше чем & Quot; вместо как:
select top 10 name from cities where @partialname < name order by name;
это " Ce " даст вам " Cedar Grove " и " Cedar Knolls " но также " Chatham " & Усилитель; " Cherry Hill " так что вы всегда получаете десять.
В LINQ:
var q = (from c in db.Cities
where partialname < c.Name
orderby c.Name
select c.Name).Take(10);