@vasdor

Как правильно организовать Mysql Partitioning по DAYOFMONTH?

Здравствуйте!

Имеется таблица:
CREATE TABLE `logs` (
  `INSERT_DATE` datetime DEFAULT NULL,
  `DATA` text NOT NULL,
  KEY `INSERT_DATE` (`INSERT_DATE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (DAYOFMONTH(INSERT_DATE))
(PARTITION p0 VALUES LESS THAN (2) ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN (3) ENGINE = InnoDB,
 ...
 PARTITION p30 VALUES LESS THAN (32) ENGINE = InnoDB) */

с партициями, сделанными по дням месяца

Запрос
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE  TABLE_NAME LIKE 'logs';

показывает, что партиции содержат количество записей, соответствующее реальным данным. Т.е. если 20-го числа 17 записей, то и партиция p21 содержит 17 строк. Тут вроде всё хорошо.

Проблема в том, что запрос
EXPLAIN PARTITIONS SELECT * FROM logs WHERE insert_date BETWEEN '2014-10-28' AND '2014-10-29';


показывает в колонке «partitions» все 31 созданных партиций, хотя должен показывать только для соотв. чисел месяца

Вопросы в следующем:
1) Почему Explain так себя ведёт?
2) Возможно ли, что в реальном запросе будут использоваться только нужные партиции?
Заранее спасибо
  • Вопрос задан
  • 1096 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Покажите вот так:
EXPLAIN PARTITIONS SELECT * FROM logs WHERE DAYOFMONTH(insert_date) BETWEEN '2014-10-28' AND '2014-10-29';
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы