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

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

Похожие вопросы