第⼋章 查询性能优化

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 第⼋章 查询性能优化

为什么查询速度会慢

查询需要经过⽹络、cup计算、磁盘io等操作,这些操作都是

耗时的。

慢查询基础

通常查询了过多的数据导致慢。

a. 检索了太多不必要的数据。

b. 多表连接时,返回全部列。

c. 重复查询数据

衡量查询的三个指标

1. 扫描⾏数

2. 响应时间

3. 返回的⾏数

查询优化的技巧

1. 使⽤索引覆盖

2. 改变库表结构,单独的汇总表

3. 重写查询

重构查询

重构查询的⽅式,等价的替换之前的查询。

查询切分,将⼀个复杂查询切分为多个简单⼦查询,

分解连接查询,将⼀个连接查询分解为多个单表查询,好处

如下:

a. 缓存效率更⾼,单表查询的缓存。

b. 分解为单个查询,减少锁的竞争。

c. 查询效率有所提升,可能⽐连接查询更⾼效。

d. 减少重复查询数据的次数发送⼀个请求MySQL到底做了什么?

a. 客户端发送SQL语句给服务器

b. server端进⾏SQL语句的解析、处理、由优化器⽣成对应的执⾏计划。

c. MySQL根据优化器⽣成的执⾏计划调⽤引擎层的api执⾏查询。

MySQL的客户端服务器通信协议

半双⼯,并不是客户端从服务器获取数据,⽽是服务器推送数据到客户端。

排序优化

排序是成本很⾼的操作,尽量避免排序。数据量⼩在内存中排序,数据量⼤借⽤磁盘排序。

两种排序算法:

a. 两次传输排序,将需要排序的字段进⾏排序,然后读取对应字段的数据。速度慢,需要两次io。

b. 单词传输排序,读取所有的列,然后进⾏排序返回。但占⽤空间⼤。

查询执⾏引擎

执⾏计划是⼀个数据结构,⽽不是可执⾏的字节码。

优化特定类型的查询

优化count(),count(*)统计所有⾏数

优化连接查询

确保on 和using ⼦句列有索引

使⽤with rollup优化group by

优化limit 和 offset

重点在于优化⼤偏移量,⼤偏移量导致扫描了不需要扫

描的⾏数。

使⽤延迟连接

1686812799633.png

优化SQL CALC FOUND ROWS

作⽤是,⼀些语句在加上limit关键词之后,满⾜limit之

后就抛弃掉以后的数据了,加上该关键词则不会抛弃

limit之后的数据,⽽是继续获取。需要精确的总数可以

使⽤count(*)。

优化union查询

mysql通过填充临时表的⽅式执⾏union查询,如果没有

消除重复⾏的需求,尽量使⽤union all .

只使⽤union MySQL会给临时表加上distinct选项,会

对整个临时表做唯⼀性检查。MySQL总是将结果放⼊临时表。

⼩结

优化三管⻬下:少做、不做、快速的做

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 关系型数据库 MySQL
【性能优化】MySql查询性能优化必知必会
【性能优化】MySql查询性能优化必知必会
120 0
【性能优化】MySql查询性能优化必知必会
|
7月前
|
SQL 关系型数据库 MySQL
后端接口性能优化分析-数据库优化(上)
后端接口性能优化分析-数据库优化
153 0
|
4月前
|
存储 缓存 运维
优化数据库查询性能的关键技巧与实践
在当今软件开发中,高效的数据库查询是保证系统性能的重要因素之一。本文将探讨如何通过优化查询语句、索引设计以及服务器配置等多方面手段,提升数据库查询效率,从而实现更快速和可靠的数据检索和处理。
|
7月前
|
SQL 关系型数据库 MySQL
后端接口性能优化分析-数据库优化(下)
后端接口性能优化分析-数据库优化
165 1
|
7月前
|
存储 缓存 数据库
InfluxDB性能优化:写入与查询调优
【4月更文挑战第30天】本文探讨了InfluxDB的性能优化,主要分为写入和查询调优。写入优化包括批量写入、调整写入缓冲区、数据压缩、shard配置优化和使用HTTP/2协议。查询优化涉及索引优化、查询语句调整、缓存管理、分区与分片策略及并发控制。根据实际需求应用这些策略,可有效提升InfluxDB的性能。
1794 1
|
7月前
|
SQL 关系型数据库 MySQL
后端接口性能优化分析-数据库优化(中)
后端接口性能优化分析-数据库优化
150 0
|
缓存 前端开发 JavaScript
性能优化记录
性能优化记录
136 0
性能优化记录
|
存储 SQL JSON
MySql查询性能优化必知必会
作为一个写业务代码的 "JAVA CURD BOY" ,具备写出高效率SQL让应用高性能访问数据库的能力非常重要。获得这个能力的过程我收获了点知识和经验,今天在这里分享出来,希望大家多多交流指点。 本文内容主要包括以下几个方面:分析查询SQL,MySQL查询优化器、数据库存储结构、索引,索引维护,索引设计,SQL优化,表结构设计,分库分表,查询功能架构设计。
538 0
|
存储 SQL 缓存
MySQL查询性能优化(上)
MySQL查询性能优化(上)
302 0
MySQL查询性能优化(上)
|
SQL 存储 缓存
MySQL查询性能优化(下)
MySQL查询性能优化(下)
182 0