2015-01-09 1 views
0

Я использую MySQL 5.6 Сервер. Я создал таблицу с HASH partitiong, но некоторые из того, как я не могу использовать определенные разделы в моем запросе.MySQL - Hash Partition не работает

Структура таблицы

CREATE TABLE `testtable` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `purchased` DATE DEFAULT NULL, 
    KEY `ìd` (`id`), 
    KEY `Purchased` (`purchased`) 
) ENGINE=INNODB 
/*!50100 PARTITION BY RANGE (YEAR(purchased)) 
SUBPARTITION BY HASH (dayofyear(purchased)) 
SUBPARTITIONS 366 
(PARTITION p0 VALUES LESS THAN (2015) ENGINE = InnoDB, 
PARTITION p1 VALUES LESS THAN (2016) ENGINE = InnoDB) */ 

Мой запрос

EXPLAIN PARTITIONS 
SELECT * 
FROM testtable 
WHERE purchased BETWEEN '2014-12-29' AND '2014-12-31'; 

Проверить SQL FIDDLE Page

Мой EXPLAIN план говорит мне, что сервер использует все разделы вместо конкретных разделов.

Как написать запрос, чтобы сервер сканировал определенные разделы? А также хотите узнать, в чем проблема с моим текущим запросом и почему он не работает?

Заранее спасибо ...

+0

Ваш запрос рассматривает 366 подразделов его первого раздела. – wchiquito

+0

@wchiquito Я знаю это, но моя проблема в том, что в запросе должен использоваться раздел 363,364,365 –

ответ

0

Правда. Хэш-разбиение по существу бесполезно.

Других вещей, чтобы отметить ...

Имея более чем около 50 разделов приводят к определенной неэффективности.

Если вы будете чистить «старые» строки, тогда рассмотрите ПО ДИАПАЗОНУ и укажите месяц в каждом разделе. Затем выполните очистку через DROP PARTITION. Более подробная информация, включая пример кода: http://mysql.rjweb.org/doc.php/partitionmaint