SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.06.2011 22:32:01

maskaral
Участник
Зарегистрирован: 10.06.2009
Сообщений: 9

оптимизация LIKE "Уфа%" по большой таблице

Здравствуйте.

Возникла задача: очень быстро выводить список населённых пунктов по первым буквам. Таблица ~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 секунды) ?
Или лучше посмотреть в сторону других субд? Если да - то каких бесплатных?

Неактивен

 

#2 21.06.2011 23:20:11

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: оптимизация LIKE "Уфа%" по большой таблице

Увеличить производительность можно с помощью Sphinx - Cистема полнотекстового поиска
Вот почитайте Wiki , Sphinx на Хабрахабр

Отредактированно evgeny (21.06.2011 23:25:33)

Неактивен

 

#3 22.06.2011 16:21:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: оптимизация LIKE "Уфа%" по большой таблице

Средствами mysql — просто добавьте памяти под индексы —
key_buffer_size в случае MyISAM и innodb_buffer_pool_size в случае InnoDB.

Сфинкс тут, кажется, большой overkill.

Неактивен

 

#4 26.06.2011 06:32:04

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: оптимизация LIKE "Уфа%" по большой таблице

paulus, а будет индекс при LIKE('строка%') использоваться? (т.е. когда искомая строка без wildcards в начале)

Неактивен

 

#5 26.06.2011 22:35:23

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: оптимизация LIKE "Уфа%" по большой таблице

Индекс будет ипользоваться. Такой запрос - аналог запроса A >= 'строка' AND A < 'строкб'.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson