Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте.
Возникла задача: очень быстро выводить список населённых пунктов по первым буквам. Таблица ~200 000 строк.
Что уже делал:
Запрос LIKE "Уфа%" без индексов выполняется секунд 10.
Поставил индекс KEY `name_idx` (`name`(10)), - стал выполняться от 0.2 до 0.5 секунд.
Пробовал смотреть в сторону FULLTEXT:
индекс - FULLTEXT KEY `name_idx_full` (`name`)
запрос MATCH (local.name) AGAINST ("уфа*" IN BOOLEAN MODE)
Но fulltext в отличие от like возвращает некорректные результаты (необходимо чтобы искомое слово было вначале). Например, выводит такой список:
- уфа
- уфа 2
- большая уфа
- маленькая уфа
Из этого списка нужно только уфа и уфа 2, остальные лишние.
Возможно ли средствами Mysql ещё увеличить производительность (подойдёт скорость меньше 0.1 секунды) ?
Или лучше посмотреть в сторону других субд? Если да - то каких бесплатных?
Неактивен
Увеличить производительность можно с помощью Sphinx - Cистема полнотекстового поиска
Вот почитайте Wiki , Sphinx на Хабрахабр
Отредактированно evgeny (21.06.2011 23:25:33)
Неактивен
Средствами mysql — просто добавьте памяти под индексы —
key_buffer_size в случае MyISAM и innodb_buffer_pool_size в случае InnoDB.
Сфинкс тут, кажется, большой overkill.
Неактивен
paulus, а будет индекс при LIKE('строка%') использоваться? (т.е. когда искомая строка без wildcards в начале)
Неактивен
Индекс будет ипользоваться. Такой запрос - аналог запроса A >= 'строка' AND A < 'строкб'.
Неактивен
Страниц: 1