Поиск в столбце MySQL для элементов, разделенных запятыми - FIND_IN_SET или LIKE - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть таблица, которая содержит разделенный запятыми список URL-адресов.Игнорирование того факта, что схема должна быть обновлена.Оба следующих утверждения работают:

SELECT id FROM website WHERE url LIKE '%example.com%';

SELECT id FROM website WHERE FIND_IN_SET('example.com', url);

Есть ли хороший способ измерить производительность запросов?Есть ли лучший способ сделать это (без обновления схемы)?

Используя EXPLAIN, я получаю следующие результаты:

+-------------+--------+---------+------+----------+
| select_type | type   | key     | rows | filtered |
+-------------+--------+---------+------+----------+
| SIMPLE      | ALL    | NULL    |  5   |   20.00  | (LIKE)
| SIMPLE      | ALL    | NULL    |  5   |   100.00 | (FIND_IN_SET)
+-------------+-------+----------+------+----------+   

1 Ответ

0 голосов
/ 11 декабря 2018

В MariaDB вы можете видеть это с: SET profiling=ON; и SHOW PROFILE; после запроса.

Образец

MariaDB [test]>  SET profiling=ON;
Query OK, 0 rows affected (0.000 sec)

MariaDB [test]>  SELECT FIND_IN_SET('2', '1,2,3,4,5');
+-------------------------------+
| FIND_IN_SET('2', '1,2,3,4,5') |
+-------------------------------+
|                             2 |
+-------------------------------+
1 row in set (0.000 sec)

MariaDB [test]>  SHOW PROFILE;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| Starting                       | 0.000025 |
| Waiting for query cache lock   | 0.000005 |
| Init                           | 0.000004 |
| Checking query cache for query | 0.000047 |
| Checking permissions           | 0.000007 |
| Opening tables                 | 0.000011 |
| After opening tables           | 0.000007 |
| Init                           | 0.000014 |
| Optimizing                     | 0.000012 |
| Executing                      | 0.000010 |
| End of update loop             | 0.000005 |
| Query end                      | 0.000003 |
| Commit                         | 0.000004 |
| Closing tables                 | 0.000003 |
| Starting cleanup               | 0.000004 |
| Freeing items                  | 0.000006 |
| Updating status                | 0.000014 |
| Reset for next command         | 0.000004 |
+--------------------------------+----------+
18 rows in set (0.000 sec)

MariaDB [test]>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...