@MikUrrey

Как оптимизировать ORDER BY в MySQL?

Таблица:

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 |
+---+---+---+---+---+---+---+---+---+---+
  • Вопрос задан
  • 305 просмотров
Пригласить эксперта
Ответы на вопрос 1
@igor_old
Добавьте в таблице event сортировку по полю urlId, или даже urlId, clientTime
Не понял вашей проблемы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы