56,679
社区成员
发帖
与我相关
我的任务
分享
create table test
(
UID int auto_increment primary key,
Uname varchar(100),
department int
)
--其中department 的取值假设只有四个 1,2,3,4
--那么这每个取值对应着一类科室,业务经常是针对一个科室的用户,所以按科室分区是理想的方式,如果按
--UID分区的话,一类业务在实现时,查询用户时要在多个分区中找,就体现不出分区的优势了
--问题:
--因为需要自增所以设置了主键,但是设置主键后,就不能仅以department建立分区,以下语句是无法执行的
create table test
(
UID int auto_increment primary key,
Uname varchar(100),
department int
)
partition by key(department)
(
partition p1 values in(1),
partition p2 values in(2),
partition p3 values in(3),
partition p4 values in(4)
)
--解决方案是:将ID,department设为复合主键
create table test
(
UID int auto_increment primary key,
Uname varchar(100),
department int,
primary key(UID,department)
)
partition by key(department)
(
partition p1 values in(1),
partition p2 values in(2),
partition p3 values in(3),
partition p4 values in(4)
)
--这样就实现了用户按照科别分区;理论上来讲提升了查询性能
--但是同时,使用了复合主键,又降低了性能
--应该怎么做??
--是应该使用单一主键,放弃使用分区呢,还是使用复合主键,建立分区,或者,按department做水平拆分表