Нужно ли включать имя раздела в запрос, чтобы получить реальную выгоду от разбиения? - PullRequest
0 голосов
/ 30 сентября 2018

Я реструктурировал одну из моих таблиц данных (DeviceLogs) с разбивкой по месяцам, используя поле даты (LogDate).Ниже приведена минимальная версия моей таблицы.

UUID  | LogDate              | DeviceId  | Counter
------|----------------------|-----------|---------
xxxx  | 2018-08-21 15:00:00  | 23        | 45
xxxx  | 2018-08-21 15:00:00  | 24        | 23
xxxx  | 2018-08-21 15:00:00  | 25        | 120
xxxx  | 2018-08-21 16:00:00  | 23        | 55
xxxx  | 2018-08-21 16:00:00  | 24        | 30

Составной первичный ключ (UUID, LogDate)

Я создал раздел следующим образом ..

ALTER TABLE DeviceLogs PARTITION BY RANGE (TO_DAYS(LogDate)) (
    PARTITION plt201807 VALUES LESS THAN (TO_DAYS('2018-07-01')),
    PARTITION plt201808 VALUES LESS THAN (TO_DAYS('2018-08-01')),
    PARTITION plt201809 VALUES LESS THAN (TO_DAYS('2018-09-01')),
    PARTITION plt201810 VALUES LESS THAN (TO_DAYS('2018-10-01'))
)

У меня есть несколько наборов запросов к приведенной выше таблице, из которых я буду генерировать отчеты и графики своей базы данных.Я могу привести несколько примеров шаблонов запросов, которые я использую.

// Hourly (Last 25 hours)
SELECT DeviceId, sum(Counter) FROM DeviceLogs 
  WHERE LogDate BETWEEN '2018-08-21 15:00:00' AND '2018-08-20 14:00:00'
  GROUP BY HOUR(LogDate)

.

// Daily (Last 30 days)
SELECT DeviceId, sum(Counter) FROM DeviceLogs 
  WHERE LogDate BETWEEN '2018-08-21 15:00:00' AND '2018-07-21 15:00:00'
  GROUP BY DAY(LogDate)

.

// Monthly (Last 12 months)
SELECT DeviceId, sum(Counter) FROM DeviceLogs 
  WHERE LogDate BETWEEN '2018-08-21 15:00:00' AND '2017-08-21 15:00:00'
  GROUP BY MONTH(LogDate)

Мой вопрос, во-первых, получу ли якакая реальная выгода от создания ежемесячного раздела для вышеупомянутых запросов?во-вторых, нужно ли включать имя раздела в вышеупомянутые запросы, чтобы получить реальную выгоду от разбиения?

1 Ответ

0 голосов
/ 30 сентября 2018

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

...