Ускорение подсчета (отдельного) одного столбца на основе условия для другого столбца в MySQL

#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. Пожалуйста, не делайте перекрестных сообщений.