这听起来可能很相似,但是,我正在对某个表进行分区......该表看起来像
<p>mysql> DESC SHOPS;
+-------------------+-------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-------------+------+-----+-------------------+-----------------------------+
| SHOP_ID | int(255) | NO | PRI | NULL | |
| SHOP_NAME | varchar(50) | YES | | NULL | |
| SHOP_CREATED_DATE | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------------+-------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)</p>
所以我有搜索功能,人们只能按商店名称搜索,所以表有大约 100 万条记录,所以我想按字母顺序对商店名称进行 RANGE 分区,但我不能这样做,因为我有主键 shop_id和商店名称可以相同...并且出现错误
ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function
解决方案:
ALTER TABLE SHOPS ADD CONSTRAINT T UNIQUE (SHOP_ID,SHOP_NAME);
并进行分区...我不能这样做,因为它不能确保 shop_id 是唯一的(主键)
最佳答案
你可以,而且必须。假设您始终让 AUTO_INCRMENT
执行其操作,则 shop_id
将始终是唯一的,并且任何以 shop_id
开头的索引都是您所需要的。
int(255)
-- (255)
没有任何意义。 INT
(SIGNED
,默认情况下)的范围为 -20 亿到 +20 亿,占用 4 个字节,无论 (...)
之后..
对该表进行分区可能没有性能优势(或任何其他优势)。如果您不这么认为,请向我们展示您认为有益的查询。
请使用SHOW CREATE TABLE
;它比 DESCRIBE
更具描述性。
关于mysql - 使用主键分区会出现错误 ERROR 1503 (HY000),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29491922/