За последние 24 часа нас посетил 17771 программист и 1622 робота. Сейчас ищут 1760 программистов ...

Помогите нубу ускорить выборку из большой таблицы

Тема в разделе "MySQL", создана пользователем vuler, 27 ноя 2016.

  1. vuler

    vuler Активный пользователь

    С нами с:
    20 май 2015
    Сообщения:
    13
    Симпатии:
    0
    Добрый день.
    В 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)?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    есть в mysql механизм поиска текста, можешь через него попробовать, или ещё sphinx search посмотреть, ещё поискать mysql text suggestion
     
    vuler и Deonis нравится это.
  3. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Замечтательная штучка. Правда, если у ТС шаред-хостинг, то вряд ли получится взять его на вооружение.
    @vuler, я так понимаю, что у вас в поиске реализован автокомплит, например, с помощью ajax. Возможно вы делаете много запросов. Если это так, то не нужно дёргать сервер при каждом введенном символе. Как можно упростить - к примеру, пользователь вводит первые три символа, делаете запрос на сервер, где находите все строки, соответствующие поисковой фразе. Получив ответ на клиенте, кешируете его и при дальнейшем вводе символов, если первые три не изменены, просто отфильтровываете закешированный результат.
     
    vuler нравится это.
  4. DAGDOG

    DAGDOG Новичок

    С нами с:
    22 ноя 2016
    Сообщения:
    18
    Симпатии:
    0
    ajax + php
    Создаешь новую функцию
    По каждому символу сортируешь по MIN - MAX
    При вводе делаешь задержку