当MySQL单表记录数太多时,各项操作性能会明显下降。
相关优化策略有很多,但肯定不是所有策略都适合某个特定案例。也许在技术层面上,很多策略都能提高性能,但我们也得考虑成本和收益(ROI)。
另,是否有性能提升,或者说从整体业务角度而言综合性能表现是否更符合需求,需要经过实战测试才能确定。
此文仅提供几种常见优化方案。对于某些遗留项目【其它方案】中提及的途径可能更合适 —— 优化SQL语句和索引,甚至设计表结构。
1. 限制数据范围
通过限定数据操作的范围可以有效减少数据量。
现实业务中需要一次获取大量数据记录的场景其实是比较少的。如,对于查找账单的需求,可以按月份查找,而非一次性获取所有账单。
2. 缓存数据
缓存一般适合数据改动频率较低的场景。如果改动频繁,就没有缓存的意义,还会为了维护缓存而增加过多开销。
在具体业务场景链路中哪些位置设置缓存也需要认真考量。持久层框架(如,MyBatis)、应用服务层、Web页面、浏览器客户端都可以做缓存。
注意:MySQL的查询缓存从5.6开始默认是关闭的,在5.7.20中被“deprecated”,在8.0中被移除。因为MySQL的查询缓存实现中用到了全局互斥锁,所以会降低性能(无法有效发挥多核服务器的优势)。
未认真考量缓存对业务的影响,特别是缓存失效时如何更新数据,是大多数新手会犯的典型错误。这种情况在新手写的应用服务层代码中出现频率较高。
建议:永远不要单人作战引入缓存机制。必须向产品经理等领导详细推演展示缓存机制的影响,确保相关干系人心中有素。认真听取老手的建议,切不可犯蠢。
在实际项目中,拍板做决定的人理解相关细节的影响是非常重要的。我见过一个案例中,产品组内掌握话语权的人集体“犯蠢/宕机”,未听取专家建议,在没有任何缓存失效应对方案的情况下使用缓存,结果在用户环境暴露重大缺陷,最后彻底弃用缓存。“将熊熊一窝”、“统帅无能,累死三军”说的就是这类情况。
3. 读写分离
写主库,读从库。
这种方案适用于 读操作 远多于 写操作的情况,而且需容忍读操作所得数据不是最新数据的情况。
《How to Setup MySQL (master-slave) Replication in CentOS 7》
4. 表分区
表分区是一种特殊的 水平拆分 方式,也是一种特殊的 库内分表。
它可以 缓解 单一表数据量过大 的问题,
但它对于减轻数据库服务器压力的作用不大,所有请求还是在争用同一服务器的资源。
MySQL 的 InnoDB 分区表就是典型代表。其优缺点:
优点:
-
方便对数据分而治之
- 可以通过删除分区来删除无用的数据。
- 为新增数据新开分区可以加快执行效率。
- 可以对分区单独优化、检查、修复、备份、恢复。
-
提高数据查询效率
可通过查询条件排除不符合条件的分区,提高效率。
缺点:
-
InnoDB 分区表不支持外键。
分区表不能引用其它表中的列作为外键;
其它表不能引用分区表中的列作为外键。 - 不支持全文索引(Fulltext Index)。
- 不支持空间类型数据(如,Point、Geometry)。
- 分区索引不支持子查询。
5. 垂直拆分
注:垂直拆分后单表数据量未变,依然很大(需要水平拆分)。
垂直分库
优点:可以用 不同数据库 支撑不同的业务,降低单个数据库的压力。
缺点:
- 上层业务需额外处理不同的数据源;
- 可能存在数据一致性维护问题。
垂直分表
优点:
- 表结构简化,易于维护;
- 单行数据量变小,一个数据块可存放更多行数据,可减少IO次数。
缺点:
- 需管理额外的主键冗余列;
- 事务处理复杂;
- 需要额外的表连接操作(join)。可在业务服务器join,减少数据库压力。
6. 水平拆分
优点:不存在单表数据量过大 和 请求高并发 的性能问题,提高了系统的负载能力 和 稳定性。
缺点:
- 数据分片的事务一致性难以解决。
- 跨节点 Join 的逻辑复杂,性能差。
- 数据多次扩展 的 难度 和 维护量 非常大。
相关推荐
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万...
mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化...
阿里云RDS FOR MySQL(MySQL5.7版本)数据库业务表每月新增数据量超过千万,随着数据量持续增加,我们业务出现大表慢查询,在业务高峰期主业务表的慢查询需要几十秒严重影响业务 方案概述 一、数据库设计及索引优化 ...
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万...
正对mysql,单个表数据量过大的优化方案,与高性能的表设计规范,提供数据库tps。希望对大家有帮助
MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...
第12课 表扫描与连接算法与MySQL多表连接优化实践 MySQL的单表扫描算法。MySQL的两表连接算法。MySQL的多表连接算法。 MySQL的多表连接的优化技巧。 预计时间1小时 第13课 查询优化的综合实例(一)------TPCH实践...
教程名称:大型门户网站核心技术-Mysql优化 课程目录:【】Mysql优化 资料【】Mysql优化01关键技术【】Mysql优化02表的设计【】Mysql优化03慢查询(一)【】Mysql优化04慢查询(二)【】Mysql优化05慢查询(三)【】Mysql...
mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql优化技巧mysql...
join使用以及优化
18. MYSQL行类型(专指IASM/MYIASM表) 19. MYSQL缓存 20. MYSQL表高速缓存工作原理 21. MYSQL扩展/优化-提供更快的速度 22. MYSQL何时使用索引 23. MYSQL何时不使用索引 24. 学会使用EXPLAIN 25. 学会使用...
mysql配置和优化mysql配置和优化mysql配置和优化mysql配置和优化mysql配置和优化
1. SQL优化 1 1.1. 优化实战 1 1.1.1. 策略1.尽量全值匹配 1 1.1.2. 策略2.最佳左前缀法则 2 1.1.3. 策略3.不在索引列上做任何操作 2 1.1.4. 策略4.范围条件放最后 3 1.1.5. 策略5.覆盖索引尽量用 3 1.1.6. 策略6.不...
mysql慢可能是配置不对,阅读一下这个可能对你有帮助 ...对于Discuz!... 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。
MYSQL在大量数据高并发时如果设计不当,由于性能问题,会导致卡顿,时延较大影响,本文介绍MYSQL的一些优化方法和案例,帮助解决并发中遇到的问题。
mysql最经典优化配置mysql最经典优化配置
MySQL介绍、架构、什么优化、查询优化、索引使用、存储优化、数据库结构优化、硬件优化、MySQL缓存、MySQL服务器参数
mysql 性能 优化 pdf MySQL 介绍和优化分享