mysql怎么优化数据库 mysql 数据优化( 七 )


这样纵向分表后:
首先存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据 。活跃数据,可以使用Innodb ,可以有更好的更新速度 。
其次,对冷数据进行更多的从库配置,因为更多的操作时查询 , 这样来加快查询速度 。对热数据,可以相对有更多的主库的横向分表处理 。
其实,对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库 。或者mongodb 一类的nosql 数据库,这里只是举例,就先不说这个 。
**2、横向分表**
字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表 , user_1,user_2等 。表结构是完全一样 , 但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分 。
分表理由:根据数据量的规模来划分 , 保证单表的容量不会太大,从而来保证单表的查询等处理能力 。
案例:同上面的例子,博客系统 。当博客的量达到很大时候,就应该采取横向分割来降低每个单表的压力,来提升性能 。例如博客的冷数据表 , 假如分为100个表,当同时有100万个用户在浏览时,如果是单表的话,会进行100万次请求,而现在分表后,就可能是每个表进行1万个数据的请求(因为,不可能绝对的平均 , 只是假设),这样压力就降低了很多很多 。
延伸:为什么要分表和分区?
日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表 。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下 , 如果涉及联合查询的情况,性能会更加糟糕 。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率 。
什么是分表?
分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表 , 我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件 。这些子表可以分布在同一块磁盘上 , 也可以在不同的机器上 。app读写的时候根据事先定义好的规则得到对应的子表名,然后去操作它 。
什么是分区?
分区和分表相似 , 都是按照规则分解表 。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器 。分区后,表面上还是一张表,但数据散列到多个位置了 。app读写的时候操作的还是大表名字 , db自动去组织分区的数据 。
**MySQL分表和分区有什么联系呢?**
1、都能提高mysql的性高,在高并发状态下都有一个良好的表现 。
2、分表和分区不矛盾,可以相互配合的,对于那些大访问量 , 并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表 , 我们可以采取分区的方式等 。
3、分表技术是比较麻烦的,需要手动去创建子表 , app服务端读写时候需要计算子表名 。采用merge好一些,但也要创建子表和配置子表间的union关系 。
4、表分区相对于分表,操作方便,不需要创建子表 。
我们知道对于大型的互联网应用,数据库单表的数据量可能达到千万甚至上亿级别,同时面临这高并发的压力 。Master-Slave结构只能对数据库的读能力进行扩展 , 写操作还是集中在Master中,Master并不能无限制的挂接Slave库 , 如果需要对数据库的吞吐能力进行进一步的扩展,可以考虑采用分库分表的策略 。

推荐阅读