日常工作中你是怎么优化 SQL 的?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本章讲解这道面试题应该如何回答

普通人

MySQL的性能优化主要在于对SQL执行的优化,因为慢的SQL执行会带来不好的用户体验,所以我们要关注SQL的执行时间,比如有些没有创建索引的列我们要创建索引.不合理的联表查询我们要简化或者规避.比如,在我以前的一个项目中,我的SQL没有索引执行,所以平均执行都需要很多的时间.后面我加上了索引就好多了.

高手

MySQL的性能优化我认为可以分为4大部分

  • 硬件和操作系统层面的优化
  • 架构设计层面的优化
  • MySQL程序配置优化
  • SQL优化

硬件及操作系统层面优化

从硬件层面来说,影响Mysql性能的因素有,CPU、可用内存大小、磁盘读写速度、网络带宽

从操作系层面来说,应用文件句柄数、操作系统网络的配置都会影响到Mysql性能。这部分的优化一般由DBA或者运维工程师去完成。

在硬件基础资源的优化中,我们重点应该关注服务本身承载的体量,然后提出合理的指标要求,避免出现资源浪费!

架构设计层面的优化

MySQL是一个磁盘IO访问量非常频繁的关系型数据库在高并发和高性能的场景中.MySQL数据库必然会承受巨大的并发压力,而此时,我们的优化方式可以分为几个部分。

1. 搭建Mysql主从集群,单个Mysql服务容易单点故障,一旦服务器宕机,将会导致依赖Mysql数据

库的应用全部无法响应。 主从集群或者主主集群可以保证服务的高可用性。

2. 读写分离设计,在读多写少的场景中,通过读写分离的方案,可以避免读写冲突导致的性能影响

3. 引入分库分表机制,通过分库可以降低单个服务器节点的IO压力,通过分表的方式可以降低单表

数据量,从而提升sql查询的效率。

4. 针对热点数据,可以引入更为高效的分布式数据库,比如Redis、MongoDB等,他们可以很好的

缓解Mysql的访问压力,同时还能提升数据检索性能。

MySQL程序配置优化

MySQL是一个经过互联网大厂验证过的生产级别的成熟数据库,对于Mysql数据库本身的优化,一

般是通过Mysql中的配置文件my.cnf来完成的,比如。

Mysql5.7版本默认的最大连接数是151个,这个值可以在my.cnf中修改。

binlog日志,默认是不开启缓存池bufferpoll的默认大小配置等。

由于这些配置一般都和用户安装的硬件环境以及使用场景有关系,因此这些配置官方只会提供一个默

认值,具体情况还得由使用者来修改。

关于配置项的修改,需要关注两个方面。

  • 配置的作用域,分为会话级别和全局
  • 是否支持热加载

因此,针对这两个点,我们需要注意的是:

  • 全局参数的设定对于已经存在的会话无法生效
  • 会话参数的设定随着会话的销毁而失效
  • 全局类的统一配置建议配置在默认配置文件中,否则重启服务会导致配置失效

SQL优化又能分为三步曲

第一、慢SQL的定位和排查

我们可以通过慢查询日志和慢查询日志分析工具得到有问题的SQL列表。

第二、执行计划分析

针对慢SQL,我们可以使用关键字explain来查看当前sql的执行计划.可以重点关注 type key rows filterd 等字段 ,从而定位该SQL执行慢的根本原因。再有的放矢的进行优化

第三、使用show profile工具

Show Profile是MySQL提供的可以用来分析当前会话中,SQL语句资源消耗情况的工具,可用于SQL调优的测量。在当前会话中.默认情况下处于show profile是关闭状态,打开之后保存最近15次的运行结果针对运行慢的SQL,通过profile工具进行详细分析.可以得到SQL执行过程中所有的资源开销情况. 如IO开销,CPU开销,内存开销等. 以上就是我对MySQL性能优化的理解。

总结

好的,看完高手的回答后,相信各位对MySQL性能优化有了一定的理解了,最后我在给各位总结一下常见的SQL优化规则:

  • SQL的查询一定要基于索引来进行数据扫描
  • 避免索引列上使用函数或者运算,这样会导致索引失效
  • where 字句中like %号,尽量放置在右边
  • 使用索引扫描,联合索引中的列从左往右,命中越多越好. l 尽可能使用SQL语句用到的索引完成排序,避免使用文件排序的方式
  • 查询有效的列信息即可.少用 * 代替列信息
  • 永远用小结果集驱动大结果集
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
166 2
|
26天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
1月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
97 10
|
1月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
2月前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
2月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
110 2
|
2月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
2月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化策略
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生不利影响