Мы прототипировали систему результатов поиска для базы данных mySQL с примерно 2 миллионами имен и адресов и 3 миллионами записей подписки и регистрации конференций.Лучший способ ускорить отображение результатов поиска
В настоящий момент выполняется поиск и все результаты возвращаются - для каждого результата я затем выполняю второй запрос для поиска подписки/конференций для уникального идентификатора человека. У меня есть индексы на всех важных столбцах, и отдельные запросы выполняются довольно быстро в phpMyAdmin (0.0xxx секунд), но передают это на отображаемую веб-страницу (PHP, выгружается с использованием DataTables), и страница занимает секунды для рендеринга. Мы попытались перенести данные в базу данных Lucene, и это похоже на LIGHTNING, но узкое место все же, по-видимому, отображает результаты, а не извлекает их.
Возможно, это связано с накладными расходами на строительство, обслуживание и рендеринг страницы в браузере. Я думаю, что я могу удалить подзапрос, о котором я упоминал выше, выполнив GROUP_CONCAT, чтобы получить коды подписки в исходном запросе, но как я могу ускорить отображение страницы с результатами?
Я мало думаю и часто спрашиваю с помощью AJAX/серверной подкачки, возможно, это путь сюда (возможно, получить 50 результатов, запрос меньше, страница меньше и может быть отправлена быстрее), но я приветствую любые предложения, которые, возможно, у вас есть.
Можете ли вы предоставить любые образцы sql/информацию о EXPLAIN/schema, включая индексы? Скорее всего, второй запрос ограничивает вас, так как миллисекунды скоро складываются. –
Вы пытались выполнить его без «DataTables» – Rob
@ Simonatmso.net - вот пример запроса поиска кого-то по имени: http://pastebin.com/DWscK2Y4 - в этом вопросе поиска подписки есть намного больше, чем нужно потому что тот же запрос используется в другом месте в системе. Можете написать отдельную меньшую версию только для результатов поиска. – MikkyX