MySQL调优指南及高级SQL技巧

知识背景:

相信大家在面试的时候都会遇到关于mysql调优的问题,这已经是必问的一环节了,特此在这边简单记录一些关于mysql调优的知识点,希望对大家有帮助!

总体介绍:

MySQL调优主要分为三个步骤:监控报警、 排查慢SQL、MySQL调优。

监控报警:

使用工具(如Prometheus+Grafana)监控MySQL,发现查询性能变慢时,及时报警提醒运维人员。

排查慢SQL:

EXPLAIN命令定位执行慢的语句,主要关注字段:

  • possible_keys:查询可能用到的索引
  • key:实际使用的索引
  • key_len:实际使用的索引的字节数长度。
  • type:访问类型,看有没有走索引。all(全表扫描),ref(命中非唯一索引),const(命中主键/唯一索引)、range(范围索引查询)、index_merge(使用多个索引)、 system(一行记录时,快速查询)。

MySQL调优:

程序配置层面:

my.cnf 比如最大连接数就可以在这里去修改

binlog日志默认不开启 我们可以手动开启

架构设计层面:

搭建mysql主从集群,读写分离设计,引入分库分表,引入缓存数据库redis

sql执行层面:

  • 比如尽量避免在字段开头加模糊查询
  • 尽量不用in not in 用between
  • 尽量不用or 用union UNION 操作符在合并结果集时会去除重复行,而 UNION ALL 不会去除重复行
  • 尽量不用null 用0代替
  • 尽量不用where 1=1
  • 尽可能避免全盘扫描 比如查询数据的时候尽量不用*
  • 减少无效数据的查询

索引优化方面:

  • 尽量全值匹配:全值匹配指的是查询条件完全匹配索引中的所有列。例如,如果一个索引包含列 A 和 B,那么查询条件应该包括这两个列才能完全匹配这个索引。
  • 计算、函数导致索引失效:计算例如where num+1=2,函数例如abs(num)取绝对值
  • 类型转换导致索引失效:例如name=123,而不是name='123'。又例如使用了不同字符集。
  • 范围条件右边的列索引失效:例如(a,b,c)联合索引,查询条件a,b,c,如果b使用了范围查询,那么b右边的c索引失效。建议把需要范围查询的字段放在最后。范围包括:(<) (<=) (>) (>=) 和 between
  • "OR"前后存在非索引列,导致索引失效:MySQL里,即使or左边条件满足,右边条件依然要进行判断

大功告成!这些在面试的时候应该够用了,再详细的可以参考这位大佬的。【MySQL调优】如何进行MySQL调优?一篇文章就够了!-CSDN博客

结语:

请你努力,为了你自己。 --《人民日报》

相关推荐
XDHCOM9 小时前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
祖传F8713 小时前
quickbi数据集数据查询时间字段显示正确,仪表板不显示
数据库·sql·阿里云
悟道子HD13 小时前
SRC漏洞挖掘——2.SQL注入漏洞实战详解
sql·web安全·网络安全·渗透测试·sql注入·sqlmap·暴力破解
需要点灵感16 小时前
SQL Server 存储过程语法整理
数据库·sql
沃尔威武16 小时前
性能调优实战:从火焰图定位到SQL优化的全流程
android·数据库·sql
数厘17 小时前
2.7SQL 四大分类:理解与避坑
数据库·sql
XDHCOM17 小时前
ORA-31215: DBMS_LDAP PL/SQL无效LDAP修改值,Oracle报错故障修复与远程处理方案,快速解决连接配置难题
数据库·sql·oracle
rockey62718 小时前
AScript动态脚本多语言环境支持
sql·c#·.net·script·eval·function·动态脚本
逆境不可逃19 小时前
高频 SQL 50 题 之 连接篇 1378 1068 1581 197 1661 577 1280 570 1934
数据库·sql
A__tao21 小时前
一键实现 SQL 转 Elasticsearch Mapping(支持字段注释 + meta 描述)
数据库·sql·elasticsearch