Mysql查询性能优化

news2024/11/20 2:44:37

Mysql查询性能优化

  • 0.前言
  • 1.为什么查询速度会慢
  • 2. 慢查询基础:优化数据访问
  • 2.1 是否向数据库请求了不需要的数据
    • 2.2 MYSQL是否在扫描额外的记录
      • 响应时间
      • 扫描的行数和返回的行数
  • 3. 重构查询方式
    • 3.1 一个复杂查询还是多个简单查询
    • 3.2 切分查询
    • 3.3 分解关联查询

0.前言

前面的章节我们介绍了如何设计最优的库表结构、如何建立最好的索引,这些对于高性能来说是必不可少的,但是这些还不够,还需要合理的设计查询。如果查询写的糟糕,即使表结构再合理、索引再合适,也无法实现高性能。
查询优化、索引优化、表结构优化需要齐头并进,一个不落。在获得编写Mysql查询经验的同时,也将学习到如何为高效查询设计表和索引。同样的,也可以学习到在优化库表结构时会影响到哪些类型的查询。

1.为什么查询速度会慢

查询任务最重要的是响应时间,如果把查询任务看做是一个任务,那么它是由一些列子任务组成的,每个子任务都会消耗一些时间,因此要优化查询时间就需要优化子任务,要么消除一些子任务,要么减少子任务的执行次数。

通常来说查询的生命周期可以按照:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回给客户端。其中“执行”可以认为是整个生命周期中最重要的阶段,这其中包括了大量为了检索数据到存储引擎的调用,以及调用后的数据处理,包括排序、分组等。

在完成这些任务的时候,查询需要在不同的地方花费时间,包括网络,CPU计算,生成统计信息和执行计划,锁等待等操作。尤其是向底层存储引擎检索数据的调用操作,这些调用操作需要在内存操作、CPU操作和内存不足时导致的I/O操作上消耗时间。根据存储引擎不同,可能还会产生大量的上下文切换以及系统调用

在每一个消耗大量时间的查询案例中,我们都能看到一些不必要的额外操作、某些操作被额外地重复了很多次、某些操作执行得太慢等。优化查询的目的就是减少和消除这些操作所花费的时间。

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

查询性能低下最基本的原因是访问的数据太多。某些查询可能是不可避免地需要筛选大量数据,但这并不常见,大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化。对于低效的查询,我们发现通过下面两步很有效。

  1. 确认应用程序是否在检索大量超过需要的数据。这通常异味着访问了太多的行,但有时候也可能是访问了太多的列。
  2. 确认MySQL服务器层是否在分析大量超过需要的数据行。

2.1 是否向数据库请求了不需要的数据

有些查询的请求会超过实际需要的数据,然后这些多余的数据会被应用程序丢弃。这会给Mysql服务器带来额外的负担,并增加了网络开销,也会消耗服务器CPU和内存资源。
一些典型案例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 MYSQL是否在扫描额外的记录

在确定查询只返回需要的数据之后,接下来应该看看查询为了返回结果是否扫描了过多数据。对于MYSQL最简单的衡量查询开销的三个指标如下:

响应时间
扫描的行数
返回的行数

在这里插入图片描述

响应时间

响应时间是服务时间和排队时间这两部分之和。

服务时间:数据库处理这个查询真正花费的时间。

排队时间:服务器因为等待某些资源没有真正执行查询的时间。可能是等待I/O操作完成,也可能是等待行锁等等。
在这里插入图片描述

扫描的行数和返回的行数

在这里插入图片描述

3. 重构查询方式

在优化有问题的查询时,目标应该是找到一个更优的方法获取实际需要的结果,而不一定总是需要从Mysql获取一模一样的结果集。

3.1 一个复杂查询还是多个简单查询

3.2 切分查询

在这里插入图片描述

3.3 分解关联查询

很多高性能的应用都会对关联查询进行分解。简单地,可以对每一个表进行一次单表查询,然后将结果在应用程序关联。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/124640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAG任务调度系统 Taier 演进之道,探究DataSourceX 模块

熟悉Taier的小伙伴们应该都知道,在11月7日发布的Taier1.3新版本中,我们融合了「DataSourceX 模块」。这是十分重要的一个变化,移除Taier外部插件依赖,新增数据源插件相关特性,支持后续Taier对接更多的RDBMS类型的SQL任…

小鹅通六周年:新知识服务时代,做好企业的“共享CTO”

2022年,产业数字化汹涌而来,驱动企业变革转型的同时,知识也以新的形式出现在各行各业。人人表达和传递知识,知识服务开始进入“下半场”。 如何应用数字化产品满足个人和组织的知识表达需求?作为知识产品与用户服务的…

HashMap的结构,1.7和1.8有哪些区别

一、真实面试题之:Hashmap的结构,1.7和1.8有哪些区别 不同点: (1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向…

【开源项目】单点登录框架XXL-SSO源码解析

单点登录框架XXL-SSO源码解析 项目介绍 XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。 拥有"轻量级、分布式、跨域、CookieToken均支持、WebAPP均支持"等特性。现已开放源代码,开箱即用。 项目地址 https://g…

GRAPH ATTENTION NETWORKS 论文/GAT学习笔记

背景 目标:适用不同结构的图的模型 图卷积 基于谱的方法 : 这些方法学习得到的filters基于拉普拉斯特征基,而拉普拉斯特征基又基于图结构,所以在特定结构上训练的模型不能直接应用到具有不同结构的图。代表:GCN 不基…

分布式系统下的认证与授权

在软件系统设计中,如何让应用能够在各种环境中安全高效的访问是个复杂的问题,这个问题的背后是一系列软件设计时需要考虑的架构安全问题:架构安全性 | 凤凰架构 认证:系统如何识别合法用户,也就是解决 你是谁 的问题&…

2022年全球气候金融产品研究报告

第一章 全球气候金融概述 气候变化既是环境问题也是发展问题,需要大量气候资金的投入,金融作为推动经济发展的核心要素,在应对天气变化中能够发挥重要作用。气候金融是与应对气候变化相关的创新金融,是利用多渠道资金来源、运用多…

redhat9安装卸载mysql

文章目录一.仓库安装1.1、下载rpm包1.2、挂载1.3、安装mysql1.4、启动mysql服务1.5、查看临时密码1.6、登录mysql二.本地安装2.1、复制链接2.2、下载解压2.3、安装需要的包2.4、启动服务2.5、登录mysql三.容器安装3.1、安装docker3.2、run镜像3.3、登录mysql四.源码安装4.1、复…

STM32MP157驱动开发——多点电容触摸屏驱动

STM32MP157驱动开发——多点电容触摸屏驱动一、简介二、电容触摸屏驱动框架简介多点触摸(MT)协议详解三、驱动开发1.添加 FT5426 设备节点2.FT5426 节点配置3.驱动编写4.运行测试5.将驱动添加到内核中1)将驱动文件放到合适的位置2)修改Makefile6.tslib 移…

Xillinx的设计约束阅读整理

《适用于FPGA和SOC的UlteraFast设计方法指南》(UG949) 《Vivado Design Suite 用户指南:设计分析与收敛技巧》(UG906) 《Vivado Design Suite 用户指南:使用约束》(UG903) 《Vivado Design Suite Tcl 命令参考指南》(UG835) 约束文…

【java基础】关于线程的一些基础知识点

1.线程的概念: 在java的应用中,线程更多情况下指的是Thread,更精细一点,执行线程就是执行Thread实体下面的run方法,java通过cpu调试,交替进行这些thread,就达到了共同进行这种效果;…

【尚硅谷】SpringBoot2核心技术-1-基础入门

【尚硅谷】SpringBoot2核心技术-1-基础入门一、Spring与SpringBoot1、Spring能做什么1.1、Spring的能力1.2、Spring的生态【没写完】二、SpringBoot2入门1、系统要求1.1、maven设置2、HelloWorld2.1、创建maven工程2.2、引入依赖2.3、创建主程序2.4、编写业务2.5、测试2.6、简化…

DM8开发技能

DM8开发技能 基础学习笔记005 文章目录DM8开发技能1、DMSQL程序设计1.1 概念1.2 数据类型1.3 程序定义1.3.1 存储过程1.3.2 存储函数1.3.3 客户端DMSQL程序1.3.4 参数1.3.5 控制结构(1)顺序结构(2)分支结构(3&#xf…

Doo Prime 德璞资本:道琼斯期货投资前必看的入门知识

美国道琼工业指数是全球最受关注的股指之一,而道琼斯期货则是典型的衍生性金融商品,交易的标的是道琼指数本身,属于期货投资的范畴,适合短线进出、波段交易。想要参与美国的期货投资市场,却不知道期货该如何开始吗&…

C# XPath的概念

一 XPath的概念 1 XPath是对XML进行查询的表达式 ① Axes(路径) / 及 //; ② 第几个子节点[1] 等; ③ 属性 ④ 条件 [] ⑤ 例如 /books/book/title //price para[type“warning”][5] 2 使用XPath ① XmlDocument docnew XmlDocument(); ② doc.LoadXml(strXml)…

通过idea打包java Maven项目 架包与全包

1 仅架包 架包定义:指仅将代码打包到jar中,在运行的平台必须保证依赖。 方法:maven —> Lifecyle —> Clean —> Package 2 架包与全包(推荐) 全包定义:将maven项目中的依赖于代码都打为一个包。 方法:mave…

RK3568平台开发系列讲解(Linux系统篇)Linux 管道的使用

🚀返回专栏总目录 文章目录 一、 管道1.1、单向管道1.2、双向管道沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍管道的使用。 一、 管道 在 fork() 成功创建子进程之后,已经打开的文件描述符在父子进程间是共享的,管道就是利用这一特性来工作的。 创建…

C++:设计一个文本行编辑程序,先从输入文件中读取数据,然后根据行编辑命令处理,将结果写到输出文件中。

3.1题目: 设计一个文本行编辑程序 对文本文件按行进行编辑:先从输入文件中读取数据,然后根据行编辑命令处理,将结果写到输出文件中。行编辑命令包括:序号 行编辑命令格式 功能 1 *L m,n …

ts概述、ts环境准备和编译、ts类型声明

文章目录1. ts概述2. ts环境准备和编译3. ts类型声明3.1 布尔值3.2 数字类型3.3 字符串类型3.4 any和unknown3.5 void、null、undefined3.6 never类型3.7 字面量类型3.8 枚举类型3.9 object对象类型3.10 数组3.11 元组3.12 自定义类型type3.13 联合类型3.14 交叉类型3.15 类型断…

《深入理解计算机系统》学习笔记 —— 虚拟内存详解

文章目录虚拟内存物理内存、物理地址、虚拟地址虚拟地址空间虚拟内存缓存页表分配页面页命中缺页虚拟内存的好处简化链接mmap虚拟内存的私有性地址翻译我们先看一下使用页表进行地址翻译有哪些东西:虚拟地址到物理地址处理过程页面大小和虚拟地址物理地址关系TLB翻译…