Почему при большом количестве строк поиск по условию LIKE быстрее, чем поиск по INT?

Есть следующая таблица:

CREATE TABLE `names` (
    `name` VARCHAR(200) NOT NULL,
    `nameHash` INT(10) UNSIGNED NOT NULL,
    `code` INT(10) UNSIGNED NOT NULL,
    UNIQUE INDEX `name` (`name`) USING BTREE,
    INDEX `nameHash` (`nameHash`) USING BTREE
)

В таблице есть ~ 700 000 записей, из которых ~600 000 - подходящих для одного имени, и остальные для прочих. Когда я запустил следующие запросы, то я не совсем понял почему произошло увеличение времени выполнения для сравнения по хэшу при большом количестве совпадений и наличии сортировки. Хотелось бы узнать причину и объяснения процесса потому, что так глубоко MySql ещё не освоил и не до конца понимаю из-за чего такое время выполнения при наличии ключей.

Запросы и их скорости с количеством найденных строк:

#Найденные строки: 816
SELECT count(*) FROM names WHERE name LIKE '%somename123%' ORDER BY code ASC;
#1 row in set (0.83 sec), 0.83, 0.82, 0.83
SELECT count(*) FROM names WHERE nameHash = 469694341 ORDER BY code ASC;
#1 row in set (0.00 sec), 0.00, 0.00, 0.00 sec

#Найденные строки: 7 133
SELECT count(*) FROM names WHERE name LIKE '%somename%' ORDER BY code ASC;
#1 row in set (0.98 sec), 0.89, 0.82, 0.82 sec
SELECT count(*) FROM names WHERE nameHash = 2698784949 ORDER BY code ASC;
#1 row in set (0.04 sec), 0.02, 0.01, 0.02 sec

#Найденные строки: 669 764
SELECT count(*) FROM names WHERE name LIKE '%so.na%' ORDER BY code ASC;
#1 row in set (0.44 sec), 0.55, 0.43, 0.43 sec
SELECT count(*) FROM names WHERE nameHash = 3893229146 ORDER BY code ASC;
#1 row in set (4.98 sec), 4.92, 5.10, 5.12 sec

Скорости без сортировки:

#Найденные строки: 816
SELECT count(*) FROM names WHERE name LIKE '%somename123%';
#1 row in set (0.65 sec), 0.64, 0.64, 0.64
SELECT count(*) FROM names WHERE nameHash = 469694341;
#1 row in set (0.00 sec), 0.00, 0.00, 0.00 sec

#Найденные строки: 7 133
SELECT count(*) FROM names WHERE name LIKE '%somename%';
#1 row in set (0.65 sec), 0.64, 0.64, 0.63
SELECT count(*) FROM names WHERE nameHash = 2698784949;
#1 row in set (0.01 sec), 0.00, 0.00, 0.01 sec

#Найденные строки: 669 764
SELECT count(*) FROM names WHERE name LIKE '%so.na%';
#1 row in set (0.26 sec), 0.25, 0.25, 0.25 sec
SELECT count(*) FROM names WHERE nameHash = 3893229146;
#1 row in set (0.28 sec), 0.15, 0.15, 0.14 sec

Запросы с explain:

EXPLAIN SELECT count(*) FROM names WHERE nameHash = 3893229146 ORDER BY code ASC;
+----+-------------+-------+------------+------+---------------+------------+---------+-------+--------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key        | key_len | ref   | rows   | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------------+---------+-------+--------+----------+-------+
|  1 | SIMPLE      | names | NULL       | ref  | nameHash      | nameHash   | 4       | const | 246635 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+------------+---------+-------+--------+----------+-------+
1 row in set, 1 warning (0.01 sec)

EXPLAIN SELECT count(*) FROM names WHERE name LIKE '%so.na%' ORDER BY code ASC;
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | names | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 493271 |    11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

Ответы (0 шт):