«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > ## MySQL LIKE против LOCATE: что быстрее при сопоставлении с образцом?

## MySQL LIKE против LOCATE: что быстрее при сопоставлении с образцом?

Опубликовано 9 ноября 2024 г.
Просматривать:379

##  MySQL LIKE vs LOCATE: Which is Faster for Pattern Matching?

MySQL LIKE против LOCATE: что эффективнее?

При выполнении запросов на сопоставление шаблонов в MySQL у вас есть два основных варианта: LIKE оператор и функция LOCATE. Какой из них работает быстрее?

Чтобы ответить на этот вопрос, давайте сравним производительность этих двух подходов с помощью простого теста. Следующий запрос использует оператор LIKE для поиска строк, в которых столбец содержит определенный текст:

SELECT * FROM table WHERE column LIKE '%text%';

В следующем запросе используется функция LOCATE для выполнения той же операции:

SELECT * FROM table WHERE LOCATE('text',column)>0;

Выполнение этих запросов к большому набору данных показывает, что оператор LIKE немного быстрее, прежде всего потому, что он позволяет избежать дополнительного сравнения (> 0), требуемого LOCATE. Вот результаты теста:

mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar'));
 --------------------------------------------- 
| BENCHMARK(100000000,LOCATE('foo','foobar')) |
 --------------------------------------------- 
|                                           0 |
 --------------------------------------------- 
1 row in set (3.24 sec)

mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar') > 0);
 ------------------------------------------------- 
| BENCHMARK(100000000,LOCATE('foo','foobar') > 0) |
 ------------------------------------------------- 
|                                               0 |
 ------------------------------------------------- 
1 row in set (4.63 sec)


mysql> SELECT BENCHMARK(100000000,'foobar' LIKE '%foo%');
 -------------------------------------------- 
| BENCHMARK(100000000,'foobar' LIKE '%foo%') |
 -------------------------------------------- 
|                                          0 |
 -------------------------------------------- 
1 row in set (4.28 sec)

mysql> SELECT @@version;
 ---------------------- 
| @@version            |
 ---------------------- 
| 5.1.36-community-log |
 ---------------------- 
1 row in set (0.01 sec)
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3