我有一个带有下面结构的表:
CREATE TABLE `orders_partition` (
`Order_Id` bigint(20) NOT NULL,
`Category_Id` bigint(20) NOT NULL,
`Order_No` varchar(50) CHARACTER SET latin1 NOT NULL,
`Student_Id` bigint(20) DEFAULT NULL,
`Country_Id` bigint(20) NOT NULL,
`Total_Refers` int(11) NOT NULL,
`Pages` float(5,1) NOT NULL,
`Word_count` int(11) NOT NULL,
`Order_Type_Id` bigint(20) DEFAULT NULL,
`Reference_Style_Id` int(11) NOT NULL,
`Payment_Mode_Id` bigint(20) DEFAULT NULL,
`Payment_Status_Id` bigint(20) DEFAULT NULL,
`Order_IP` varchar(255) CHARACTER SET latin1 NOT NULL,
`Order_Amount` decimal(10,2) NOT NULL DEFAULT '0.00',
`Order_Status_Id` bigint(20) DEFAULT NULL,
`Panic` tinyint(1) NOT NULL DEFAULT '0',
`Url_Referal_Detail` text CHARACTER SET latin1 NOT NULL,
`publish_status` int(11) NOT NULL,
`L_Q_Reason_Id` varchar(255) CHARACTER SET latin1 DEFAULT 'NULL',
`Transfer_Status` enum('NT','T','A') CHARACTER SET latin1 NOT NULL DEFAULT 'A' COMMENT 'NT=>not transfer,T=>transfer,A=>allowed to transfer',
`Visibility` enum('E','D') CHARACTER SET latin1 NOT NULL DEFAULT 'E' COMMENT 'E=enabled, D=disabled',
`Active_Date` datetime NOT NULL,
`Active_Status` enum('A','DA') CHARACTER SET latin1 NOT NULL DEFAULT 'A' COMMENT 'A=>Active,DA=>Deactive'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `orders_partition`
ADD PRIMARY KEY (`Order_Id`),
ADD UNIQUE KEY `Order_Id` (`Order_Id`),
ADD KEY `Order_Status_Id` (`Order_Status_Id`),
ADD KEY `Country_Id` (`Country_Id`)
执行以下分区查询
ALTER TABLE orders_partition
PARTITION BY LIST COLUMNS (Active_Status)
(
PARTITION p01 VALUES IN ('A'),
PARTITION p02 VALUES IN ('DA')
)
在错误以下
以下1659 -field'active_status'是这种类型的分区
不允许类型
我正在我们的MySQL表中实现分区(列表列(,MySQL版本为5.7
不要尝试在标志上分区;不太可能提供任何好处。
mySQL的PARTITIONing
有许多限制;您遇到了可以在哪些数据型上进行分区的限制 - 列表不包括ENUM
。
如果您已经过去了,下一个错误将需要在每个唯一键(包括主密钥(中包含"分区密钥"。
同时,UNIQUE(Order_id)
使用PRIMARY KEY(Order_id)
冗余。PK是(按MySQL的定义(是一个键且唯一的。