SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.01.2011 13:48:20

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

REGEXP не юзает индекс

Всем привет!!

Не могу разобраться в чем проблема. Есть таблица с индексами


/*Index Information For - goods*/
---------------------------------------------

Table   Non_unique  Key_name  Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null    Index_type  Comment
------  ----------  --------  ------------  -----------  ---------  -----------  --------  ------  ------  ----------  -------
goods            0  PRIMARY              1  id           A                30557    (NULL)  (NULL)          BTREE              
goods            1  pp                   1  pp           A                30557    (NULL)  (NULL)          BTREE              
 


Делаю два запроса


EXPLAIN SELECT * FROM `goods` WHERE `goods`.`pp` REGEXP '[[:<:]]бетон';
EXPLAIN SELECT * FROM `goods` WHERE `goods`.`pp` LIKE 'бетон%';
 

Первая кверя не юзает индекс, а вторая юзает. По ТЗ мне нужно использовать REGEXP.
Подскажите, кто знает, в чем проблема?

Неактивен

 

#2 28.01.2011 17:32:14

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

Re: REGEXP не юзает индекс

Проблема в том, что REGEXP не использует индекс. Если по ТЗ надо делать
REGEXP — делайте REGEXP, а в реальных проектах будете использовать LIKE smile

Неактивен

 

#3 28.01.2011 18:40:22

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Re: REGEXP не юзает индекс

гм....
не подскажите каким образом тогда мне можно сделать выборку строк следующим образом:
1. Супербетон
2. Бетон М-6
3. Песок,цемент,бетономешалка
4. Песок, цемент, бетон
чтобы выбирать строки где слова начинаются словом бетон (1 не подходит, 2-4 подходит)?
То сделал поиск на регекспах, работает-то он правильно, но меееедлено sad

Отредактированно tazododu (28.01.2011 18:42:40)

Неактивен

 

#4 28.01.2011 19:39:56

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

Re: REGEXP не юзает индекс

Никак, будет работать очень медленно. Обычно делают полнотекстовые индексы,
но они позволяют искать только целые слова (т.е. супербетон и бетономешалку
по такому индексу не найдешь).

Если нужно именно по началу слова, то можно попробовать сделать отдельную
табличку, в которую заносить слова отдельно на каждой строке, и по ней уже
искать через LIKE 'бетон%'. Будет работать быстрее, но нужно будет поддерживать
индексную табличку.

Неактивен

 

#5 31.01.2011 10:07:16

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Re: REGEXP не юзает индекс

с таблицей тоже не вариант.
не подскажете какой можно подключить поисковый движок к сайту?

Неактивен

 

#6 31.01.2011 19:05:10

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

Re: REGEXP не юзает индекс

Полнотекстовый поиск / sphinx / Яндекс.Сервер smile

Неактивен

 

#7 01.02.2011 10:05:53

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Re: REGEXP не юзает индекс

попробую раздуплить sphinx)

Неактивен

 

Board footer

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