@nurzhannogerbek

Как получить пул данных за период по столбцам YEAR, MONTH, DAY?

Здравствуйте, товарищи! Мне нужен ваш совет.

В базе данных MySQL есть таблица с подобной структурой (см. ниже). В этой таблице хранится порядка 20 млн. данных, а весит таблица порядка 3.5 ГБ. Задача как можно быстрее вывести данные за определенный период.

| DATE_TIME_KEY       | YEAR | MONTH | DAY | VALUE | 
|--------------------------------------------------|
| 2018-11-09 00:00:00 | 2018 | 11    | 9   | 1056  |
| 2018-11-09 01:00:00 | 2018 | 11    | 9   | 8756  |
| 2018-11-10 00:00:00 | 2018 | 11    | 10  | 6582  |
| 2018-11-10 01:00:00 | 2018 | 11    | 10  | 2382  |
|**************************************************|
| 2018-12-09 00:00:00 | 2018 | 12    | 9   | 6892  |
| 2018-12-09 00:00:00 | 2018 | 12    | 9   | 8592  |
| 2018-12-10 00:00:00 | 2018 | 12    | 10  | 9587  |
| 2018-12-10 00:00:00 | 2018 | 12    | 10  | 6587  |
|**************************************************|
| 2019-03-05 00:00:00 | 2019 | 3     | 5   |  5693 |
| 2019-03-05 00:00:00 | 2019 | 3     | 5   |  7593 |
| 2019-03-06 00:00:00 | 2019 | 3     | 6   |  5698 |
| 2019-03-06 00:00:00 | 2019 | 3     | 6   |  8598 |


На столбцы YEAR, MONTH, DAY было добавлено партиционирование, а на столбец DATE_TIME_KEY добавил индексирование.

Выполнил два следующих запроса, которые возвращает пул данных за один день. Оба запроса возвращают данные примерно за одинаковое время. Плюс минус 1.5 секунды.

Первый запрос:
SELECT * FROM big_table
WHERE YEAR=2018 AND MONTH=9 AND DAY=1


Второй запрос:
SELECT * FROM big_table
FORCE INDEX (date_time_index)
WHERE DATE_TIME_KEY BETWEEN '2018-09-01 00:00:00' AND '2018-09-01 23:59:59'


У меня возникает два вопроса.

Первый вопрос:
Что в теории быстрее, партиционирование или индексирование?

Второй вопрос:
Так как пул данных за один день в моем случаи оказался не показательным, я решил взять пул данных за месяц и замерить скорость возврата данных. Не знаю как правильно получить пул данных за определенный период по столбцам YEAR, MONTH, DAY. Помогите пожалуйста составить запрос.
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 2
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Поиск по индексу должен быть быстрее. Посмотрите план выполнения запроса и оцените по стоимости. Они у вас одинаково могут выполняться, потому что закешировались оба.
Ответ написан
Stalker_RED
@Stalker_RED
Вероятно второй запрос быстрее, потому что выбирает по полю с индексом.
Возможно если создать индексы по year и month - будет быстрее. Возможно композитный по этим двум полям будет еще быстрее.
Ответ написан
Ваш ответ на вопрос

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

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