数据库的演变:
1:单表单库--》项目的累加数据,单表的性能瓶颈
2:数据量=》500w;索引=》单独指向区(索引片)查询的效率
3:访问量大:--》主从读写(一主一从=》一主多从)
4:访问--》操作 记录数据=》数据量增加(单表的索引页出现瓶颈)=》表分区
分表=》垂直分表 表结构 减少的是表的大小
分表=》水平切分,减少一个表的数据量
5:分库=》根据业务;比如订单作为单独一个库
分库分表:
单边数据量大=》扫描行数多,io高=》查询慢
解释:表特别大
电商平台:
很多商家
用户很多=》产生很多订单
订单有个特点:用户习惯不会去考虑查询以前的订单
订单有时间关系
实际用户考虑:三个月=》半年=》1年
假设order表
每个月100-180
1年=》12个200w
2400w
10年=》24000w
分表 (600W): 单表500w,总量5个G再进行分表
1-3 order_2019_0103
4-6 order_2019_0406
7-9 order_2019_0709
10-12 order_2019_1012
分表切分方式:垂直切分,水平切分
垂直切分:按字段分,(在项目之初建立好)
水平切分:切分方式不固定,没有固定的公式
规则,项目运行之后进行切分
一旦表切分,基本就和join 拜拜了=》查询问题,实际应用中是
水平和垂直一起使用
切分规则:根据时间,根据取模,根据数据量,等等
水平切分之后,必然会对一些查询特别不友好。
分表查询问题
水平切分,不是手动切分的(定时器切分数据表)
垂直切分 是手动
CREATE TABLE `data_order_2018` AS SELECT * FROM data_order
分库:
为什么需要分库?
mysql
按业务:订单相关的业务分库