Партицирование по дате mysql

314
21 февраля 2017, 17:35

Всем привет! Есть непонятки с партицированием таблицы. Имеется таблица 'items'. 18 млн записей:

CREATE TABLE IF NOT EXISTS `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `log_id` int(11) NOT NULL,
  `res_id` int(11) NOT NULL,
  `link` varchar(255) NOT NULL,
  `title` text NOT NULL,
  `content` text NOT NULL,
  `n_date` varchar(255) NOT NULL,
  `nd_date` int(11) NOT NULL,
  `s_date` int(11) NOT NULL,
  `not_date` date NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `link_2` (`link`),
  KEY `log_id` (`log_id`),
  KEY `res_id` (`res_id`),
  KEY `now_date` (`not_date`),
  KEY `sql_index` (`res_id`,`id`,`not_date`)
) ENGINE=Aria  DEFAULT CHARSET=utf8 PAGE_CHECKSUM=0 AUTO_INCREMENT=18382133 ;

Хочу осуществить партицирование данной таблицы по дате. В качестве тестирования создал маленькую копию этой таблицы, где поле 'not_date' включил в состав имеющихся первичных и уникальных ключей.

CREATE TABLE IF NOT EXISTS `part_items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `log_id` int(11) NOT NULL,
  `res_id` int(11) NOT NULL,
  `link` varchar(255) NOT NULL,
  `title` text NOT NULL,
  `content` text NOT NULL,
  `n_date` varchar(255) NOT NULL,
  `nd_date` int(11) NOT NULL,
  `s_date` int(11) NOT NULL,
  `not_date` date NOT NULL,
  PRIMARY KEY (`not_date`,`id`),
  UNIQUE KEY `link_2` (`not_date`,`link`),
  KEY `log_id` (`log_id`),
  KEY `res_id` (`res_id`),
  KEY `now_date` (`not_date`),
  KEY `sql_index` (`res_id`,`id`,`not_date`)
) ENGINE=Aria  DEFAULT CHARSET=utf8 PAGE_CHECKSUM=0
/*!50100 PARTITION BY RANGE ( TO_DAYS(not_date))
(PARTITION p_1 VALUES LESS THAN (735963) ENGINE = Aria,
 PARTITION p_2 VALUES LESS THAN (736694) ENGINE = Aria) */ AUTO_INCREMENT=18414661 ;

После чего выполнил запрос партицирования:

alter table `part_items` PARTITION BY RANGE( TO_DAYS(not_date) ) (
PARTITION p_1 VALUES LESS THAN( TO_DAYS('2014-12-31') ),
PARTITION p_2 VALUES LESS THAN( TO_DAYS('2016-12-31') )
);

В итоге выполняю запрос, который по логике должен обратиться только в партицию p_1. Explain показывает все верно. Тогда выполняю другой запрос, который по логике должен осуществлять поиск только в p_2. Но тут почему то explain показывает, что поиск проводился в обоих партициях. Что я сделал не так? Заранее спасибо! Вот первый и второй запросы:

explain partitions SELECT * FROM `part_items` where content like '%k%' and not_date < '2014-05-12'
explain partitions SELECT * FROM `part_items` where content like '%k%' and not_date > '2015-01-01'
READ ALSO
Объединить условия из двух таблиц

Объединить условия из двух таблиц

Есть запрос, в результате которого я получаю две строки(по каждому подзапросу)

312
Какие тип таблиц и формат строк выбрать?

Какие тип таблиц и формат строк выбрать?

Используется MySQL - 5,7-x64 Access -2016 odbc

280
reflection - Вызов метода с передачей массива

reflection - Вызов метода с передачей массива

Имеется класс вот в таком видеТоесть написать Foo или Bar с указанием импорта не получится, только так

351