有一个表,想用分区的方式提升查询性能
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做水平拆分表
希望大家帮忙给点意见或建议分区复合主键MySQL