Нужно/можно ли добавить индекс?

12
D
На сайте с 28.06.2008
Offline
1114
736

Структура таблицы такая:

CREATE TABLE IF NOT EXISTS `drug` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`price` varchar(255) NOT NULL,
`aptek_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2161984 ;

Медленный запрос вида:

# Query_time: 2.823049 Lock_time: 0.000026 Rows_sent: 0 Rows_examined: 2161983
use med;
SET timestamp=1352349606;
SELECT * FROM `drug` WHERE name LIKE '%бронхикум элексир%';

Можно ли как то ускорить поиск по таблице, а то в ней 2 млн. записей?

IL
На сайте с 20.04.2007
Offline
435
#1
Dram:
Можно ли как то ускорить поиск по таблице, а то в ней 2 млн. записей?

Полнотекстовый индекс (+ переписать запросы) или сфинкс.

Если есть возможность - я бы второе выбирал.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
D
На сайте с 28.06.2008
Offline
1114
#2

А что такое полнотекстовый индекс и сфинкс?

IL
На сайте с 20.04.2007
Offline
435
#3
D
На сайте с 28.06.2008
Offline
1114
#4

Боюсь сделать что-то не правильно, а Вы не подскажите какой запрос мне нужно выполнить для создания этого индекса?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#5

Боюсь, что даже если Вам все подробно расскажу/покажут - Вы наломаете дров.

Обратитесь к спецам и все.

Можно конечно более сложный, но более полезный/перспективный(задел на будущее) - сделать все самому.

Вот алгоритм:

1) делаем бэкап БД

2) http://bit.ly/UxEa0W - идем сюда

3) Делаем попытку создания фуллТекстИндекса.

4) Если все прошло плохо идем пункт 5, если все получилось - пункт 6

5) Восстанавливаем из бэкапа БД(ту живую, которую Вы еще не ломали), переходим пункт 2

6) Поздравляем, Вы только что повысили навык "прямые руки" на 2 lvl

7) Идем на форум и отписываемся о результатах проделанной работы.

Подпись))
D
На сайте с 28.06.2008
Offline
1114
#6

Милованов - самого главного Вы не написали :) Какой запрос на добавить то? :)

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#7

ALTER TABLE `drug` ADD FULLTEXT ixFull_drug_name(`name`)

как то так.

Предварительно сделайте бэкап.

D
На сайте с 28.06.2008
Offline
1114
#8

Спасибо, теперь на подобные запросы уходит от 0,005 до 1 сек.

D
На сайте с 28.06.2008
Offline
1114
#9

Поспешил я поблагодарить - не изменилось абсолютно ничего. Запросы так и пишутся в лог медленных запросов (время 2-3 сек) - индекс не заполняется

Grandemeister
На сайте с 25.02.2006
Offline
100
#10

LIKE - это нечеткий поиск, обычно индекс там что мертвому припарка

Если все так критично с временем запроса, то надо или переписывать запрос или подумать в сторону сфинкс, действительно

---------- Добавлено 09.11.2012 в 12:37 ----------

Как вариант переписывания запроса - делать выборку обычным селектом и искать php stripos()

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий