51Testing软件测试论坛

标题: Mysql大表优化方案 [打印本页]

作者: 八戒你干嘛    时间: 2019-2-1 13:56
标题: Mysql大表优化方案

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化。

单表优化

除非单表数据后来会一直上涨,否则不要考虑拆分,拆分会带来逻辑,部署,运维的各种复杂度.
一般以整型值为主的表在千万级以下,字符型为主的表在500万以下是没有太大问题的.

事实上,Mysql的单表性能还是有很多优化空间的.甚至能正常支撑千万级以上的数据量.

字段优化索引优化查询SQL优化引擎

目前广泛使用的是MyISAM引擎和InnoDB两种引擎.

MyISAM

引擎是Mysql5.1版本之前的默认引擎.他的特点是:

InnoDB

InnoDB在Mysql5.5之后成为默认引擎,他的特点是:

总的来说,MyISAM适合SELECT密集型的表,而InnoDB适合insert和update密集型的表.

升级硬件

Scale up,这个不必多少,根据MYSQL是CPU密集新还是I/O密集型通过提升CPU和内存,或者使用SSD,都能显著提升MYSQL性能.

读写分离

也是目前常用的优化方式. 从库读主库写.不建议采用双主或者多主引入不必要的复杂性,尽量采用稳重其它方案来提高性能。同时目前很多拆分的解决方案也考虑到了读写分离。

缓存

缓存可以发生在这些层次:

可以根据情况结合一个或者多个层次加入缓存。这里主要介绍服务层缓存的实现,目前主要有两种方式:
* 1. 直写式(Write Through): 在数据写入数据库后,同时更新缓存,位置缓存和数据库的一致性。这也是大多数缓存应用框架如:SpringCache 的工作方式。这种实现非常简单,同步好,但效率一般。
* 2. 回写式(Write Back): 当有数据要写入数据库时,只会更新缓存,然后异步批量的将缓存同步到数据库中。这种方式实现比较复杂需要较多的应用层逻辑,同时可能会产生数据库和缓存的不同步,但是效率非常高。

垂直拆分

垂直分库是根据数据库里面的数据表的相关性进行拆分,比如:一个数据库里面既存在用户数据,又存在订单数据,那么垂直拆分可以把用户数据放到用户库、把订单数据放到订单库。垂直分表是对数据表进行垂直拆分的一种方式,常见的是把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的,只是字段不一样,使用主键关联






欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2