#mysql #sql #datetime #query-optimization #where-clause
#mysql #sql #дата и время #оптимизация запросов #where-предложение
Вопрос:
У меня есть таблица MySQL из 10 миллионов строк и 3 столбцов в следующем формате:
---------------------------------------------------------------------------------------
| id time num |
---------------------------------------------------------------------------------------
| ca65e871-d758-437e-b76f-175234760e7b 2020-11-14 23:08:05.553770 11112222222 |
| ... |
---------------------------------------------------------------------------------------
Для выполнения первого запроса ниже я проиндексировал таблицу (num, time)
, и она работает очень быстро (<5 миллисекунд в таблице с 10 миллионами строк):
SELECT COUNT(*)
FROM TABLE_NAME
WHERE time >= '2020-11-14 23:08:05.553752' AND num = 11112222222
Однако мне также нужно выполнить count(distinct)
предложение для одного столбца с учетом условия для другого столбца, например:
SELECT COUNT(DISTINCT time)
FROM TABLE_NAME
WHERE time >= '2020-11-14 23:08:05.553752' AND num = 11112222222
Это выполняется около 20 миллисекунд, что тоже очень быстро, но мне было интересно, есть ли способ сделать это еще быстрее (возможно, аналогично времени выполнения первого запроса — менее 5 миллисекунд)?
Комментарии:
1. 20 миллисекунд — это довольно быстро.
2. @GordonLinoff Я согласен. Но я создаю приложение для подсчета очков, которое должно иметь общее время отклика 20 миллисекунд. Итак, с этой точки зрения мне нужно сделать это еще быстрее, чем это.
3. Я сомневаюсь, что время с точностью до микросекунды нуждается в DISTINCT … более того, я сомневаюсь, что такая точность разумна.
4. Пожалуйста, не делайте перекрестных сообщений.