2013-05-20 104 views
0

我下面這篇文章:MySQL分區唯一鍵

http://www.chrismoos.com/2010/01/31/mysql-partitioning-tables-with-millions-of-rows

但是當我運行我的查詢分割我的產品表(包含50萬行數據),我得到的錯誤:

#1503 - A UNIQUE INDEX must include all columns in the table's partitioning function 

我的查詢是:

ALTER TABLE parts_library PARTITION by HASH(manufacturerId) PARTITIONS 200 

我的主鍵是ID和毫安的化合物鍵nufacturerId,這是在文章中相同,所以我不明白爲什麼我得到這個錯誤。

這裏是我的表創建語句:

CREATE TABLE IF NOT EXISTS `parts_library` (
    `id` int(11) NOT NULL, 
    `dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `typeId` int(3) NOT NULL COMMENT 'Reference to part_types', 
    `manufacturerId` int(11) NOT NULL DEFAULT '0', 
    `familyId` int(11) NOT NULL DEFAULT '454', 
    `partNumber` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'e.g. 6ES5123B62', 
    `idealForm` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'E.g. 6ES5-123-B6/2', 
    `comCodeId` int(11) DEFAULT NULL, 
    `countryOriginId` int(3) NOT NULL DEFAULT '258', 
    `minStockLevel` int(11) DEFAULT NULL, 
    `weight` decimal(11,2) DEFAULT NULL, 
    `width` decimal(11,2) DEFAULT NULL, 
    `height` decimal(11,2) DEFAULT NULL, 
    `depth` decimal(11,2) DEFAULT NULL, 
    `validated` tinyint(1) NOT NULL DEFAULT '0', 
    `onWeb` tinyint(1) DEFAULT '0', 
    `indexed` tinyint(1) NOT NULL DEFAULT '1', 
    `averageMargin` decimal(11,2) NOT NULL, 
    PRIMARY KEY (`id`,`manufacturerId`), 
    UNIQUE KEY `partNumber` (`partNumber`), 
    KEY `fk_parts_library_parts_categories1` (`typeId`), 
    KEY `fk_parts_library_manufacturers1` (`manufacturerId`), 
    KEY `fk_parts_library_geo_countries1` (`countryOriginId`), 
    KEY `fk_parts_library_parts_families1` (`familyId`), 
    KEY `indexed` (`indexed`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

我如何分割我的表?

回答

1

bewteen你的代碼和arcticle的區別 - 你有

UNIQUE KEY 'partNumber' ('partNumber')

未在文章中提到

。 DB抱怨你需要包含用於分區的列,如:

UNIQUE KEY 'partNumber' ('manufacturerId','partNumber')