【问题标题】:Partitioning with primary key gives Error ERROR 1503 (HY000)使用主键进行分区会产生错误 ERROR 1503 (HY000)
【发布时间】:2015-04-08 07:39:16
【问题描述】:

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

mysql> DESC 商店; +--------------------+-------------+------+-----+-- -----------------+--------------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +--------------------+-------------+------+-----+-- -----------------+--------------+ |店铺编号 |整数(255) |否 |优先级 |空 | | |店铺名称 | varchar(50) |是 | |空 | | | SHOP_CREATED_DATE |时间戳 |否 | | CURRENT_TIMESTAMP |在更新 CURRENT_TIMESTAMP | +--------------------+-------------+------+-----+-- -----------------+--------------+ 3 行一组(0.00 秒)

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

错误 1503 (HY000):主键必须包含 表的分区函数

解决方案:

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

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

【问题讨论】:

  • 阅读这部分文档:dev.mysql.com/doc/refman/5.7/en/…。特别是,“表上的每个唯一键 [和主键] 都必须使用表的分区表达式中的每一列”
  • 所以我不能在商店桌子上做分区...???有没有其他方法可以确保商店 id 唯一

标签: mysql partitioning


【解决方案1】:

你可以,你必须。假设你总是让AUTO_INCREMENT 做它的事情,shop_id 将永远是唯一的,任何以shop_id 开头的索引都是你所需要的。

int(255) -- (255) 没有任何意义。 INTSIGNED,默认)的范围为 -20 亿到 +20 亿,占用 4 个字节,不管它后面的 (...)..

对这个表进行分区可能没有性能优势(或任何其他优势)。如果您不这么认为,请向我们展示您认为会受益的查询。

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

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 2013-12-14
    • 1970-01-01
    • 2022-01-22
    • 2018-10-04
    • 2019-06-15
    • 1970-01-01
    • 2018-12-09
    • 2018-09-09
    相关资源
    最近更新 更多