Таблица:
CREATE TABLE `event` (
`eventId` bigint unsigned NOT NULL AUTO_INCREMENT,
`urlId` int DEFAULT NULL,
###... несколько незначимых в данном случае столбцов опущены
`clientTime` bigint unsigned NOT NULL,
PRIMARY KEY (`eventId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Запрос:
SELECT * FROM `event` WHERE `urlId`=432 ORDER BY `clientTime` ASC;
В таблице сейчас порядка 6 миллионов записей, и так вышло, что значения clientTime повторяются крайне редко (временные метки). Как я понял, по этой причине сортировка не цепляется за индексы (пробовал urlId+clientTime и просто clientTime) и запрос работает крайне медленно. Как быть?
Главное - сортировка по clientTime принципиально важна для правильной постобработки данных.
EXPLAIN SELECT * FROM `event` WHERE `urlId`=432 ORDER BY `clientTime` ASC;
+---+---+---+---+---+---+---+---+---+---+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+---+---+---+---+---+---+---+---+---+---+
| 1 | SIMPLE | event | ALL | urlId_sort,select_no_time | NULL | NULL | NULL | 5263392 | Using where; Using filesort |
+---+---+---+---+---+---+---+---+---+---+