Ответ 1
Запрос Like
более оптимизирован в соответствии с комментариями, указанными здесь.
http://thingsilearn.wordpress.com/2008/02/28/mysql-query-speed-regexp-vs-like/
У меня есть таблица CANDIDATE в моем db, которая работает под MySQL 5.5, и я пытаюсь получить строки из таблицы, где RAM содержит в первом имени, поэтому я могу запустить ниже двух запросов, но я хотел бы теперь, какой запрос мы следует использовать в течение длительного времени в отношении оптимизации.
SELECT * FROM CANDIDATE c WHERE firstname REGEXP 'ram';
SELECT * FROM CANDIDATE c WHERE firstname LIKE'%ram%';
Запрос Like
более оптимизирован в соответствии с комментариями, указанными здесь.
http://thingsilearn.wordpress.com/2008/02/28/mysql-query-speed-regexp-vs-like/
REGEXP
и LIKE
используются для совершенно разных случаев.
LIKE
используется для добавления подстановочных знаков в строку, тогда как REGEXP
используется для сопоставления атрибута с регулярными выражениями.
В вашем случае a firstname
с большей вероятностью будет соответствовать с помощью LIKE
, чем REGEXP
, и, следовательно, он будет более оптимизирован.
Если вы можете использовать LIKE вместо REGEXP, используйте LIKE
Лучше использовать запрос LIKE вместо REGEXP, если вы не уверены в ценности.
Также LIKE намного быстрее, чем REGEXP.
Я попробовал это на MySQL 8.0.13
и сравнил LIKE
REGEXP
в таблице со строками 1M+ в столбце с индексом:
SELECT * FROM table WHERE column LIKE '%foobar%';
Запрос занял 10.0418 секунд.
SELECT * FROM table WHERE REGEXP_LIKE(column, 'foobar');
Запрос занял 11,0742 секунды.
LIKE
производительность быстрее. Если вы можете использовать его вместо REGEXP
, сделайте это.