Есть таблица с примерно 1млн. записей, InnoDB. Запрос вида
SELECT ID FROM messages WHERE comments LIKE '%test%' ORDER BY time LIMIT 10;
выполняется 2,79с. Выхлоп show profile
:
| preparing | 0.000023 |
| executing | 0.000003 |
| Sorting result | 2.781331 |
| Sending data | 0.000281 |
| end | 0.000006 |
| query end | 0.000006 |
explain:
+----+-------------+----------+------+---------------+------+---------+------+--------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+--------+-----------------------------+
| 1 | SIMPLE | messages | ALL | NULL | NULL | NULL | NULL | 955319 | Using where; Using filesort |
+----+-------------+----------+------+---------------+------+---------+------+--------+-----------------------------+
Теперь то же самое, но без ORDER BY
:
| preparing | 0.000009 |
| executing | 0.000002 |
| Sending data | 2.003370 |
| end | 0.000015 |
| query end | 0.000007 |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | messages | ALL | NULL | NULL | NULL | NULL | 955319 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------+
В первом случае, я так понимаю, задержка может быть из-за того что нет индексов для столбца time
, по которому производится сортировка. Но почему во втором случае есть задержка в sending data
, а в первом случае оно стремится к нулю? Значит ли это что если добавить индекс, то выполняться будет всё равно с задержкой, но теперь уже на этапе sending data
?