Добрый день. В Mysql не силен, хотел спросить такой вопрос. Есть база городов мира около 2 млн. строк. Поля id(INT),country_id(INT),region_id(INT),ru_name(TEXT),en_name(TEXT) Первичный ключ по id. Предположим пользователь вводит слово *мо*, ему должны выдать все города начинающиеся с мо. Выборка идет долго, около 3-5 секунд(на локальном сервере), из-за того, как я понял, что таблица отсортирована по id. Вопрос как ускорить выборку? сделать сортировку по ru_name? сам алгоритм выборки путем дробления таблицы на куски уже реализован в механизме mysql или надо делать на стороне php? И может ли одна таблица быть отсортирована в 3-х вариантах под запросы (id,ru_name,en_name)?
есть в mysql механизм поиска текста, можешь через него попробовать, или ещё sphinx search посмотреть, ещё поискать mysql text suggestion
Замечтательная штучка. Правда, если у ТС шаред-хостинг, то вряд ли получится взять его на вооружение. @vuler, я так понимаю, что у вас в поиске реализован автокомплит, например, с помощью ajax. Возможно вы делаете много запросов. Если это так, то не нужно дёргать сервер при каждом введенном символе. Как можно упростить - к примеру, пользователь вводит первые три символа, делаете запрос на сервер, где находите все строки, соответствующие поисковой фразе. Получив ответ на клиенте, кешируете его и при дальнейшем вводе символов, если первые три не изменены, просто отфильтровываете закешированный результат.
ajax + php Создаешь новую функцию По каждому символу сортируешь по MIN - MAX При вводе делаешь задержку