它可能听起来很相似,但我正在研究某些桌子上的分区...表格看起来像
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是唯一的(主键)
答案 0 :(得分:0)
你可以,而且你必须。假设您始终让AUTO_INCREMENT
执行此操作,shop_id
将始终是唯一的,并且任何以shop_id
开头的索引都是您需要的。
int(255)
- (255)
没有任何意义。 INT
(默认情况下为SIGNED
)的范围为-2亿到+20亿,占用4个字节,无论后面是(...)
..
分区此表可能具有 no 性能优势(或任何其他优势)。如果您不这么认为,请向我们展示您认为有益的问题。
请使用SHOW CREATE TABLE
;它比DESCRIBE
更具描述性。