[MySQL]3-MySQL查询性能优化

server/2025/2/14 2:45:52/

目录

🌟慢查询基础:优化数据访问

不必要的数据

MySQL扫描额外的记录

访问类型

重构查询的方式

切分查询(分治)

分解联接查询

特定类型查询优化

优化count查询

使用近似值

覆盖索引

优化LIMIT和OFFSET

使用覆盖索引的联查

记录分页查询节点

优化UNION查询

资料引用



索引优化、查询性能优化、库表结构优化需要齐头并进。三管齐下:不做、少做、快速地做。

🌟慢查询基础:优化数据访问

可以通过减少要筛选的数据量进行优化。大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化。

1、确认是否检索了大量不必要的数据,是否访问了太多行或者列

2、确认MySQL服务器层是否在分析大量不必要的数据行

不必要的数据

不需要的数据会带来额外的网络开销、内存占用、CPU资源占用。

只查询需要的列,行。

多次查询相同的数据,使用缓存。

MySQL扫描额外的记录

衡量性能开销的指标:响应时间、扫描行数、返回行数

响应时间=服务时间+排队时间

理想情况在扫描的行数和返回的行数是相同的。

比如LIMIT OFFSET就经常会扫描到用不到的行。

访问类型

在分析执行计划是,对于访问类型type列,不需要记住访问类型,但是需要明白扫描表、扫描索引、范围访问和单值访问的概念。

重构查询的方式

MySQL从设计上让连接和断开连接都很轻量。因此,有时候将一个大查询分解为小查询是很有必要的。

切分查询(分治)

当大查询语句可能会长时间锁住很多数据、阻塞其他查询的时候,可以将其拆分为多个对MySQL影响小的语句。

分解联接查询

联接查询可以对联接的每个表进行单表查询,然后在应用程序中进行联接。

特定类型查询优化

优化count查询

count()函数在统计列值时要求列值非空,即不统计NULL。

count(*)并不会统计所有列,而是忽略所有列直接统计所有的行数。

统计不同值时,可以使用如下语句:

SELECT COUNT(cloumn = 'value1' OR NULL) AS name_a, COUNT(cloumn = 'value2' OR NULL) AS name_b FROM table;

使用近似值

某些业务场景并不要求精确统计,使用近似值代替比复杂统计查询快的多。

覆盖索引

在优化SQL后,MySQL层面还做的只有覆盖索引了。

优化LIMIT和OFFSET

LIMIT做分页查询的时候,需要优化大偏移量的性能,也就是深度分页性能。

主要是MySQL扫描了大量不需要的行的性能问题。

使用覆盖索引的联查

记录分页查询节点

where id >100000 之类的

优化UNION查询

使用union合并查询结果时,union会去重,union all不会去重。

如非必要,使用uniall all,对于重复数据在应用层处理

资料引用

《高性能MySQL》


http://www.ppmy.cn/server/167502.html

相关文章

MySQL 安装配置(完整教程)

文章目录 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL 5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统(RDBMS)&am…

docker发布自己的镜像

官方node-red镜像: nodered/node-red - Docker Image 拉取v3版本: docker pull nodered/node-red:3.1.14 运行镜像: docker run --restartalways --privilegedtrue -d -p 1880:1880 -v node_red_data:/data --name mynodered nodered/n…

【Android开发】安卓手机APP使用机器学习进行QR二维码识别

前言:本项目是一个 Android 平台的二维码扫描应用,具备二维码扫描和信息展示功能。借助 AndroidX CameraX 库实现相机的预览、图像捕获与分析,使用 Google ML Kit 进行二维码识别。为方便大家了解项目全貌,以下将介绍项目核心代码文件 MainActivity.java 和 AndroidManifes…

标题:深入探索 gRPC:后端开发中高效通信的利器

随着微服务架构在后端开发中的普及,如何实现服务之间高效、低延迟的通信成为了一个关键问题。传统的 HTTP 协议在处理大量并发请求时,虽然易于实现,但性能上存在一定的瓶颈。为了解决这个问题,gRPC(Google Remote Proc…

MacOS安装Milvus向量数据库

Milvus 是一个高性能、高度可扩展的矢量数据库,可在从笔记本电脑到大规模分布式系统的各种环境中高效运行。Milvus 提供强大的数据建模功能,使您能够将非结构化或多模态数据组织成结构化集合。Milvus是Apache 2.0许可分发的开源项目。 Milvus 提供三种部…

Record-Mode 备案免关站插件,让 WordPress 备案不影响 SEO 和收录

专为 WordPress 网站设计的实用工具,旨在帮助网站在备案期间无需关闭即可正常收录所有页面的信息,利于SEO。 功能特性 免关站展示:开启插件后,非管理员用户访问网站时,会看到以半透明遮罩层或不透明全屏遮罩样式呈现的…

react 创建项目报错(react19)详细解决办法

一、问题描述 使用脚手架创建项目的时候报错如下: 二、原因及解决办法 打开项目查看 package.json 文件发现,使用的是最新的19版本,所以会出现版本不兼容的问题 所以我们需要换成18版本的 1、删除node_modules文件夹 2、package.json 中替…

6. Docker 本地镜像发布到私有库

6. Docker 本地镜像发布到私有库 文章目录 6. Docker 本地镜像发布到私有库1. 将本地镜像推送到私有库详细步骤:2. 最后: 本地镜像发布到私有库流程图: Docker Registry 是什么: 官方Docker Hub地址:https://hub.dock…