深入MySQL优化:提升数据库性能的关键策略
创始人
2025-07-14 10:30:30
0

MySQL优化

从设计上,可根据需要:分库分表、读写分离、冷热分离、使用缓存、定期进行数据清理。

从客户端使用上,使用连接池、避免大事务、返回数据多使用物理分页。

从优化MySQL配置文件上,调整MySQL配置文件中的参数,如缓冲区大小、最大连接数等,以适应应用程序的需要。

从优化表结构上,使用合适的存储引擎;避免使用大型或不必要的列,并尽可能使用小型数据类型;尽量把字段设置为NOT NULL;对于某些文本字段来说,例如“省份”或者“性别”,我们可以将他们定义为ENUM(枚举)类型。因为在MySQL中,ENUM类型被当做数值型数据来处理,而数值型数据被处理起来的速度要比文本类型要快得多。

从优化查询上,善用EXPLAIN查看SQL执行计划;使用连接(JOIN)来代替子查询,减少在内存中创建临时表;尽量用union all代替union减少排序;利用小表去驱动大表,减少嵌套循环中的循环次数,以减少 IO总量及CPU运算的次数;善用索引。 

查询在什么时候不走索引、索引失效 

1.不满足走索引的条件,常见的情况有 

1.1 不满足最左匹配原则 

1.2 查询条件使用了函数 

1.3 or操作有一个字段没有索引 

1.4 使用like条件以%开头 

1.5 显式或隐式类型转换导致索引失效 

1.6 存在范围查询,比如between、>、<等条件时,会造成后面的索引字段失效 

2.走索引效率低于全表扫描,常见的情况有 

2.1 查询条件对null做判断,而null的值很多   

2.2 一个字段区分度很小,比如性别、状态 

3.需要回表的查询结果集过大,超过了配置的范围 

Explain解释 

type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。 

key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。 

key_len列,索引长度

rows列,扫描行数。该值是个预估值。 

extra列,详细说明。注意,常见的不太友好的值,如下:Using filesort,Using temporary。 

如何解决大事务问题? 

解决大事务问题常规的方法有:避免远程调用、避免一次性处理太多数据、覆盖方法粒度尽量小。

具体到解决问题,需要考虑是什么、为什么、怎么办三个方面。

是什么是要界定大事务。比如可以把大事务分成了三个级别,分别是1s以上,500ms以上和100ms以上。1s以上会严重影响数据库性能,有很大概率会造成整体链路超时,是重要紧急的。之前通过事务中不包含外部调用之后,偶尔会有100ms左右的大事务,超过120ms的基本没有。这些我们记录在一个文档中,在涉及其他相关修改时,一起通过梳理逻辑优化解决。

如果把RR改成RC需要注意哪些问题?

在现代互联网场景下,其实很少需要在一个事务中对同一行数据读取两次的情况,RR隔离级别实用性不高,而且因为加了间隙锁和Next-Key Lock,性能有所降低,死锁概率也相对较高。在历史上,RR确实解决了mysql主从复制时的一个问题。在早期的mysql版本中,只有statement这种bin log格式,这时候,如果使用提交读(Read Committed)、未提交读(Read Uncommitted)这两种隔离级别会因为回放顺序而出现与主库数据不一致。MySQL是在5.1.5版本开始支持row的、在5.1.8版本中开始支持mixed,后面这两种可以代替 statement格式。RC 隔离级别只支持row格式的binlog。如果指定了mixed作为 binlog 格式,那么如果使用RC,服务器会自动使用基于row 格式的日志记录。 


相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...