Улучшение производительности автозаполнения AJAX - PullRequest
0 голосов
/ 12 мая 2009

В моей базе данных sql server 2005, содержащей миллион записей, есть таблица со списком городов / штатов США. На страницах моего веб-приложения есть текстовое поле местоположения, в котором используется функция автозаполнения AJAX. Мне нужно показать полный город / штат, когда пользователь вводит 3 символа. Например: Вход бос .. Выход: Boston, MA

В настоящее время с точки зрения производительности эта функция довольно медленная. Как я могу улучшить это?

Спасибо за чтение.

Ответы [ 3 ]

2 голосов
/ 12 мая 2009

Вы проверили индексы в своей базе данных? Если ваш запрос отформатирован правильно, и у вас есть правильные индексы в вашей таблице, вы можете запросить базу данных из 5 миллионов строк и получить результаты менее чем за секунду. Я бы посоветовал посмотреть, есть ли у вас индекс по городу с добавленным столбцом State к индексу. Таким образом, когда вы делаете запрос по городу, он будет возвращать как город, так и штат из индекса.

Если вы выполните свой запрос в sql management studio и нажмете ctrl-m, вы увидите план выполнения по вашему запросу. Если вы видите что-то вроде сканирования таблицы или сканирования индекса, значит, у вас неверный индекс в таблице. Вы хотите убедиться, что ваши результаты имеют поиск по индексу, это означает, что ваш запрос проходит через соответствующие страницы в базе данных, чтобы найти ваши данные.

Надеюсь, это поможет.

0 голосов
/ 18 июня 2009

Использовать родительские дочерние выпадающие списки

0 голосов
/ 12 мая 2009

Я полагаю, что проблема заключается не в самой базе данных (хотя вы должны проверить ее на наличие проблем с индексами), а в количестве времени, которое требуется для извлечения информации из базы данных, поместите ее в соответствующие объекты и т. д., и отправьте его в браузер. Если это так, то не так много вариантов без какой-либо реальной работы.

  1. Вы можете кэшировать часто доступную информацию на веб-сервере. Если вы знаете, что есть много городов, к которым часто обращаются, вы можете сохранить их заранее, а затем проверить базу данных, если то, что ищет пользователь, отсутствует в системе. Мы используем деревья префиксов для хранения информации, когда пользователь что-то печатает, и нам нужно найти ее в списке.

  2. Вы можете начать извлекать информацию из базы данных, как только пользователь начнет печатать, а затем выполнить сопряжение полного набора результатов после получения дополнительной информации от пользователя. Это немного сложнее, так как вам придется хранить информацию в памяти между запросами (поэтому, если пользователь вводит «B», вы начинаете поиск и сохраняете его в сеансе. Когда пользователь заканчивает вводить «BOS», результирующий набор из начального запроса временно находится в памяти, и вы можете выполнить цикл и извлечь подмножество, соответствующее окончательному запросу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...