Что лучше?MySQL, как или REGEXP? - PullRequest
6 голосов
/ 27 мая 2011

У меня есть named_scope с LIKE и NOT LIKE в одном выражении. Это быстрее с точки зрения выполнения по сравнению с использованием REGEXP?

named_scope :order_search, :order => "name LIKE '%urgent%' AND name NOT LIKE '%not urgent%' DESC, created_at DESC"

Ответы [ 3 ]

5 голосов
/ 27 мая 2011

Разница в миллисекундах, незаметная.Если вы не имеете дело с чрезвычайно большим объемом трафика, это не будет иметь значения.

Если у вас возникают проблемы с производительностью при вашем подходе, скорее всего, потому что в вашей таблице много строк.В таком случае узким местом является не LIKE (и MySQL также поддерживает REGEXP), а структура вашей таблицы.

В любом случае вам следует прочитать индексы MySQL и полный текст MySQLПоиск .

2 голосов
/ 27 мая 2011

Насколько мне известно, MySQL LIKE будет использовать Бойера-Мура в этом случае, поэтому может быть небольшое преимущество для LIKE.

Это будет незначительно по сравнению с использованием триггера, который сохранит все выражение в поле is_urgent. Затем вы можете добавить индекс на (is_urgent, created_at).

1 голос
/ 27 мая 2011

Ваш запрос не оставлен большинству запросов, он не может использовать индекс, поэтому like и regexp одинаковы

...