SQL 优化|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 快速学习 SQL 优化

开发者学堂课程【MySQL 实操课程:SQL 优化】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/717/detail/12830


SQL 优化

 

一、SQL 优化建议

1、SQL 诊断优化,会帮您分析当前执行的 SQL,并给到具体的优化建议。

通过 DMS- 数据管理服务平台,比如执行 SELECT*FROM emp;查询这个 emp 表

点击执行就会查询出来了

现在写入:SELECT * FROH emp where enawe LIKE "zhangsan%"; 执行,找到这条语句,对这条语句进行 SQL 诊断,他会帮你去分析:

图片1.png

MySQL 本身自己也提供了一些这样的功能。

诊断会包括索引专断建议和语句优化建议,这里如果没有建索引这个表,他会给你一些建议。

在 MySQL 本身有什么方式可以看到它的指标呢?

在连接 MySQL 的时候,写入 show status like’com ’可以看到 com 开头的一些变量,里面有一个 com select,讲的是当前连接客户端进来的时候总共执行的select 操作的次数,比如每次执行一次 select,当前数值是1,每执行一次就会+1

Com insert  主要讲的是执行 insert 的次数,比如批量插入的情况,他会给你算一次。

Com update 就是更新的次数,com delete 就是删除的次数。

在这些变量可以大概能够看到当前 MySQL 运行的情况,像 select 讲的是没有被缓存的次数,如果缓存被命中了,就不会给算到 select 里面。

查看指定的存储引擎:show status like ‘inndb 

比如 Inndb rows read 可以看到总共读了多少行,Inndb rows delect  删除了多少行,它会帮你记录下来。

其他还有一些像 com rollback 它的执行次数也会被统计,了解到会不会回滚,如果回滚次数很频繁,应用编写可能存在一定的问题。

也可以看当前总共有多少个连接到数据库,写入:shou status like‘connections’

这个连接次数并不是当前有多少连接,而是总共有多少次连接。

通过这些指标可以看到了,怎么做一些优化呢?

可以通过查看它执行的计划,写入 explain select*from user where name‘zhangsan1

显示:

图片2.png

Select type 表示 select 类型,如果下面是 simple 代表是单表查询,没有使用到表连接或者只查询。

如果 type 下面是 const 讲得是一行,他解锁的就是一行,如果 type 下面是 all 代表全表扫描,如果是 indest 代表是全索引扫描,如果是 range 代表是范围扫描,就是大于、等于的一些操作。

如果是 ref 讲的是使用唯一索引扫描或者唯一索引前缀扫描,主要用来返回匹配某歌单独值的记录行。

Const 是表里面最多匹配一行,这种查询速度非常的迅速,其实就是根据组件或者唯一索引进行查询的,所以这种效率是最高的。

看一条语句执行的情况可以写入:select @@have profiling 

显示为 yes,代表现在支持查看执行计划的功能。

写入 select @@profiling,显示为0.

写入 set profiling=1,执行就变为了1.

设置为1 后就可以执行刚才的 SQL 语句。

写入 show profiles  它就会把 SQL 语句记录下来。

Show profile for query 2 可以看到详细的执行情况:

Status

Duration

Starting

0.000061

Checking permissions

0.000006

Init

0.000015

System lock

0.000008

Optimizing

0.000007

Statistics

0.000012

Preparing

0.000009

Executing

0.000002

Sending data

0.000038

End

0.000002

Query end

0.000007

Closing tables

0.000005

Freeing items

0.000010

Cleaning up

0.000009

这个过程首先是 Starting 开始,然后进行权限的验证 Checking permissions,Init打开表执行初始化,System lock 系统的锁,Optimizing 优化帮你自动生成执行计划,之后做一些准备工作进行执行,执行完毕后发送数据 Sending data,涉及到MySQL server 对存储引擎之间的数据的查询与模仿,比如交给数据引擎,他帮你查询,查询完成后会将数据返回给 MySQL server 层。查询就结束了。

最终把表关了,将资源释放出来,这是整个过程。

举例:

写入 show tables,比如这里有一张表叫 show create table school:

school lCREATE TABLE ‘school‘

‘id‘int (11)DBFA0r UL,

name‘Tvarchar (20)DEFA0LT NOLL,

UNIQUE KEY`idx id_name( id  , 'name

ENGINE=InnoDB DEFAOLT CHARSET=latin1 l

可以看到这是 innoDB 的存储引擎,可以把这个表重新复制一份:create table school myisam like school,然后写入 insert into school myisam select * from school; 将数据藏起来。

然后写入 select*from school mysiam:

Id

Name

1001

Yizhong

1002

Erzhong

1003

Sanzhong

1006

liuzhong

1007

Qizhong

Show create table school mysiam,然后写入:alter table school myisam engine MYISAM 改为这个存储引擎。

查看:show profiles 会发现很多条语句,执行:select count (1)from:chool myisam;

最后输入 show profiles 可以看到查询 school 总比查询 myisam 的表要多。

写入:show profile for query 13,显示:

Status

Duration

Starting

0.000055

Checking permissions

0.000006

Init

0.000015

System lock

0.000012

Optimizing

0.000008

Statistics

0.000003

Preparing

0.000011

Executing

0.000008

Sending data

0.000038

End

0.000003

Query end

0.000008

Closing tables

0.000006

Freeing items

0.000011

Cleaning up

0.000012

这是 innoDB 存储引擎的详细执行计划,会发现这里主要的环节是 Sending data

写入 show profile for query 14,会发现没有 Sending data。

Myisam 和 innoDB 存储引擎在针对 SQL 处理过程当中是存在差异的。

Myisam 在执行统计操作的时候,不需要消耗太多的资源,因为这些数据它是直接缓存起来的,但是 innoDB 没有,所以执行时间会比较长。

如果写入更多数据在表里面,会更加明显看到它们的差异,所以针对 innoDB 和myisam 统计的场景它们的差别。

在 DMS 管理平台也是提供了这样的功能,前面讲到了可以进行 SQL 诊断,也可以看它的执行计划。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
SQL 存储 关系型数据库
不懂索引,简历上都不敢写自己熟悉SQL优化
大家好,我是考哥。今天给大家带来MySQL索引相关核心知识。对MySQL索引的理解甚至比你掌握还重要,索引是优化SQL的前提和基础,我们一步步来先打好地基。当MySQL表数据量不大时,缺少索引对查询性能的影响都不会太大,可能都是0.0几秒;但当表数据量逐日递增时,建立一个合适且优雅的索引就至关重要了。
798 1
不懂索引,简历上都不敢写自己熟悉SQL优化
|
7天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之如果oss文件过大,如何在不调整oss源文件大小的情况下优化查询sql
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
15天前
|
SQL 关系型数据库 MySQL
SQL优化方法有哪些?
【6月更文挑战第16天】SQL优化方法有哪些?
220 5
|
15天前
|
SQL 数据处理 数据库
如何进行SQL查询优化?
【6月更文挑战第16天】如何进行SQL查询优化?
363 3
|
21天前
|
SQL 缓存 监控
sql anywhere 数据库优化
SQL Anywhere数据库优化涉及索引、查询、配置、硬件、维护和应用程序多方面。关键策略包括:确保索引有效且定期优化,使用EXPLAIN计划优化查询,调整数据库缓存设置,升级硬件,定期备份,优化SQL语句并减少数据库访问。实时监控性能并据此调优,但需依据具体应用场景和版本进行适配测试。
|
2天前
|
SQL 存储 数据库
sql优化提速整理
sql优化提速整理
|
24天前
|
存储 SQL 关系型数据库
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
236 1
|
4天前
|
SQL 存储 关系型数据库
Mysql-事务-锁-索引-sql优化-隔离级别
Mysql-事务-锁-索引-sql优化-隔离级别
|
2月前
|
SQL 监控 数据库
sql anywhere 数据库优化
\ Anywhere\对于任何数据库系统,优化都是持续的过程,旨在提高查询性能、减少资源消耗并确保数据的完整性和安全性。以下是一些建议,帮助您优化 SQL Anywhere 数据库: 1. **
58 5
|
2月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
简简单单 My SQL 学习笔记(1)——表中数据的整删改查