Автозаполнение Dropdown - слишком много данных, тайм-аут

StackOverflow https://stackoverflow.com/questions/176782

  •  05-07-2019
  •  | 
  •  

Вопрос

Итак, у меня есть выпадающий список автозаполнения со списком населенных пунктов. Первоначально у меня было только 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top