MySql分区

分区代码
1 Alter table PostReplys partition by range(PostId)
2 (
3 partition p1 values less than (20000),
4 partition p2 values less than (40000), 
5 partition p3 values less than (60000),
6 partition p4 values less than maxvalue
7 );
SQL

输入上面的代码之后会提示:A PRIMARY KEY must include all columns in the table's partitioning function(主键必须包含表分区函数中的所有列),SqlServer和orcale数据库对这个没有限制

解决方案:创建分区的时候,这个主键必须要是分区的一部分, 或者,这张表就不要创建主键

 

删除主键:

分区好了,但是如果根据主键来删除.. --- 我保证这个数据是自增 不是主键,则没有索引,当mysql发现如果没有主键,则会给我们创建一个主键索引,rowid ,对 我们性能提升不大。当他发现我们当前的库里面,存在一个唯一,而且不为null 的索引的,时候,则吧当前这个索引变成主键索引,就不需要rowid

 

所以接下来就创建一个唯一并且不为null 的索引

 


CREATE UNIQUE INDEX index_PostReplys on
PostReplys(id)

这个时候会报错: A PRIMARY KEY must include all columns in the table's partitioning function

将分区字段加入索引,代码如下:

CREATE UNIQUE INDEX index_PostReplys on
PostReplys(id,PostId)

这样分区就做好了。

后续:用雪花算法生成唯一ID

posted @ 2021-01-11 16:14  陈志武  阅读(144)  评论(0)    收藏  举报