2015-01-09 31 views
0

我正在使用MySQL 5.6服務器。我創建了一個表,其中包含HASH partitiong,但是有些如何無法在我的查詢中使用特定分區。MySQL - 哈希分區不工作

表結構

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

我解釋計劃告訴我,服務器使用的所有分區,而不是特定的分區。

如何編寫查詢以便服務器掃描特定的分區? 也想知道我目前的查詢有什麼問題,以及它爲什麼不工作?

在此先感謝...

+0

您的查詢正在查看其第一個分區的366個子分區。 – wchiquito

+0

@wchiquito我知道,但我的問題是,查詢應該使用分區363,364,365 –

回答

0

是的。 HASH分區本質上是無用的。

其他注意事項...

具有小於約50分區更導致一些效率低下。

如果您將清除「舊」行,則考慮BY RANGE並在每個分區中放置一個月。然後通過DROP PARTITION進行清除。更多詳細信息,包括示例代碼:http://mysql.rjweb.org/doc.php/partitionmaint