mysql - 使用主键分区会出现错误 ERROR 1503 (HY000)

标签 mysql partitioning

这听起来可能很相似,但是,我正在对某个表进行分区......该表看起来像

<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/

相关文章:

mysql - 获取表名的子查询

mysql - 在 OSX 10.10 Yosemite 上自动启动 MySQL

c# - 这是 Partitioner.Create(int fromInclusive, int toExclusive) 中的错误吗?

PostgreSQL 分区。约束排除未在 SELECT 上启动

oracle - PCT(分区更改跟踪)可以用于列表范围分区表吗?

mysql - 在mysql上按id显示数据

mysql - 在 MySQL 中创建表失败,出现错误 2103、错误 1146 和错误 1051

MySQL 5.7 : fine tuning for too many connections error

mysql - 在这种情况下我应该使用分区吗

mysql - MySQL 可以并行化 UNION 子查询(或任何东西)吗?