Влияет ли дополнительный "AND` columnname` LIKE '%' "на производительность? - PullRequest
3 голосов
/ 20 декабря 2010


простой вопрос: добавляет ли что-то подобное к запросу снижение производительности в mysql или его быстро оптимизируют?

AND `name` LIKE '%'

У меня нет большой базы данных, которую я мог бы протестироватьон включен.

Кстати, я хочу этого, потому что я хочу, чтобы пользователи могли отправлять некоторые параметры в мой серверный скрипт, который затем захватывает подготовленный оператор, указанный пользователем, и вставляет параметры.Я хочу, чтобы пользователи могли пропускать параметры при поиске без ущерба для производительности, а LIKE обычно относительно медленно, верно?

Ответы [ 5 ]

4 голосов
/ 20 декабря 2010

LIKE может быть действительно дорогим, в зависимости от индексов, которые у вас есть в поле name.Вы пытались измерить ваш запрос?

EXPLAIN [EXTENDED] SELECT [...] AND `name` LIKE '%'

См. Также http://dev.mysql.com/doc/refman/5.0/en/explain.html

Тогда MySQL сообщит вам, оптимизировал ли он ненужное предложение LIKE или нет.

0 голосов
/ 20 декабря 2010

Я согласен с предыдущими ответами: LIKE довольно дорого. Если ваша таблица правильно проиндексирована, небольшой набор результатов может быть дополнительно , используя LIKE.

В сочетании с OR запрос снова будет ужасно дорогим, однако.

Кроме того, только использование LIKE для запроса к индексированному полю VARCHAR в лучшем случае должно обеспечивать минимальный прирост производительности.

0 голосов
/ 20 декабря 2010

LIKE может определенно ухудшить производительность. Самое главное, чтобы проверить, что у вас есть правильные индексы. Какие индексы у вас есть в таблицах для запроса?

Я подозреваю, что поскольку ваш LIKE на самом деле ничего не делает, он просто будет оптимизирован, но вам нужно будет проверить это, чтобы подтвердить это.

0 голосов
/ 20 декабря 2010

Только что протестировано с MySQL 5 с использованием таблиц MyISAM.

SELECT * FROM tablename

17596 rows in set (0.28 sec)

SELECT * FROM tablename WHERE columnname LIKE '%'

17596 rows in set (0.20 sec)

Кажется, что механизм запросов MySQL оптимизирует такие вещи, как '0' = '0' и LIKE '%'.

0 голосов
/ 20 декабря 2010

Да.Как и очень дорого.Но, как и в большинстве случаев, это зависит от размера вашей БД.

...