数据库分区问题 与复合主键

totola147 2013-04-01 02:36:29
有一个表,想用分区的方式提升查询性能


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做水平拆分表


希望大家帮忙给点意见或建议
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotel-刘志东 2013-04-01
  • 打赏
  • 举报
回复
根据特定优化进行查询的。
ACMAIN_CHM 2013-04-01
  • 打赏
  • 举报
回复
没有适合所有条件的优化。 所谓优化仅是针对特定查询的。
totola147 2013-04-01
  • 打赏
  • 举报
回复
引用 1 楼 heavstar 的回复:
不用自增,采用中间表生成自增。
这个我也有想到,但是我觉得真这样做的话是否得不偿失
heavstar 2013-04-01
  • 打赏
  • 举报
回复
不用自增,采用中间表生成自增。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧