使用主键分区会出现Error ERROR 1503(HY000)

时间:2015-04-07 12:44:02

标签: mysql partitioning

它可能听起来很相似,但我正在研究某些桌子上的分区...表格看起来像

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)

所以我有搜索功能,人们只能按商店名搜索,所以表有大约100万条记录,所以我想按字母顺序对商店名称进行RANGE分区,但我不能这样做,因为我有主键shop_id和商店名称可以相同......并且收到错误

  

ERROR 1503(HY000):PRIMARY KEY必须包含所有列   表格的分区功能

解决方案:

ALTER TABLE SHOPS ADD CONSTRAINT T  UNIQUE (SHOP_ID,SHOP_NAME);   

并进行分区...我不能这样做,因为它不能确保shop_id是唯一的(主键)

1 个答案:

答案 0 :(得分:0)

你可以,而且你必须。假设您始终让AUTO_INCREMENT执行此操作,shop_id将始终是唯一的,并且任何以shop_id开头的索引都是您需要的。

int(255) - (255)没有任何意义。 INT(默认情况下为SIGNED)的范围为-2亿到+20亿,占用4个字节,无论后面是(...) ..

分区此表可能具有 no 性能优势(或任何其他优势)。如果您不这么认为,请向我们展示您认为有益的问题。

请使用SHOW CREATE TABLE;它比DESCRIBE更具描述性。