MySql性能优化

0 引言

MySQL优化,一方面是找出系统的瓶颈,提高MySQL数据库整体的性能;另一方面需要合理的结构设计和参数调整,以提高用户操作响应的速度;同时还要尽可能节省系统资源,以便系统可以提供更大负荷的服务。

在MySQL中,可以使用SHOW STATUS语句查询一些MySQL数据库的性能参数。SHOW STATUS语句的语法如下:

  SHOW STATUS LIKE 'value';

其中,value是要查询的参数值,一些常用的性能参数如下:

● Connections:连接MySQL服务器的次数。

● Uptime:MySQL服务器的上线时间。

● Slow_queries:慢查询的次数。

● Com_select:查询操作的次数。

● Com_insert:插入操作的次数。

● Com_update:更新操作的次数。

● Com_delete:删除操作的次数。

 1 优化查询

查询是数据库中最频繁的操作,提高查询速度可以有效地提高MySQL数据库的性能。

1.1 分析查询语句

EXPLAIN 是MySQL提供的一个非常有用的命令,用于查看查询语句的执行计划。通过执行计划,你可以了解MySQL如何解析和执行你的查询,从而找出可能的性能瓶颈。

使用 EXPLAIN 的基本语法如下:

EXPLAIN SELECT * FROM your_table WHERE your_conditions;

 ● id:SELECT识别符。这是SELECT的查询序列号。

● select_type:表示SELECT语句的类型。它可以是以下几种取值:SIMPLE表示简单查询,其中不包括连接查询和子查询;PRIMARY表示主查询,或者是最外层的查询语句;UNION表示连接查询的第2个或后面的查询语句;DEPENDENT UNION,连接查询中的第2个或后面的SELECT语句,取决于外面的查询;UNION RESULT,连接查询的结果;SUBQUERY,子查询中的第1个SELECT语句;DEPENDENT SUBQUERY,子查询中的第1个SELECT,取决于外面的查询;DERIVED,导出表的SELECT(FROM子句的子查询)。

● table:表示查询的表。

● type:表示表的连接类型。以下是type列中可能出现的一些值及其含义:

system
这是最好的连接类型,表示只有一行被检索。这通常发生在系统表或常量表的查询中。

const
表示表有一个匹配的行,常用于通过主键或唯一索引查找的记录。

eq_ref
每个从表的行与主表的恰好一行相匹配,通常用于主键或唯一索引的JOIN操作。

ref
非唯一索引的查找,返回匹配某个单独值的所有行。常用于使用非唯一索引或主键查找。

fulltext
使用全文索引进行搜索。

ref_or_null
类似于ref,但MySQL还会查找包含NULL值的行。

index_merge
表示MySQL使用了索引合并优化方法。

unique_subquery
在IN子查询中,子查询返回的结果集是唯一的。

index_subquery
与unique_subquery类似,但子查询返回的结果集可能包含重复值。

range
用于范围查询,例如使用BETWEEN或<、>操作符。

index
全索引扫描,即遍历整个索引来查找匹配的行。这比全表扫描更快,因为索引的大小通常小于表数据。

ALL
全表扫描,最坏的情况。如果MySQL选择这种方法,那么通常意味着没有可用的索引来优化查询,或者查询优化器认为全表扫描更快。

1.2 索引对查询速度的影响

MySQL中提高性能的一个有效方式就是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且可加快查询的速度,因此,索引对查询的速度有着至关重要的影响。使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度、提高数据库的性能。如果查询时没有使用索引,查询语句将扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。如果使用索引进行查询,查询语句可以根据索引快速定位到待查询记录,从而减少查询的记录数,达到提高查询速度的目的。

1.2.1 使用索引查询

索引可以提高查询的速度,但并不是使用带有索引的字段查询时索引都会起作用。

使用索引有几种特殊情况,在这些情况下有可能使用带有索引的字段查询时索引并没有起作用。

 1.2.1.1 使用LIKE关键字的查询语句

在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为“%”,索引不会起作用。只有“%”不在第一个位置,索引才会起作用。

索引无效

索引有效

 1.2.1.2 使用多列索引的查询语句

MySQL可以为多个字段创建索引。一个索引可以包括16个字段。对于多列索引,只有查询条件中使用了这些字段中的第1个字段时索引才会被使用。

f_id='12'索引有效

f_price=5.2 ,索引的第二列,索引无效

 1.2.1.3 使用OR关键字的查询语句

 查询语句的查询条件中只有OR关键字,且OR前后的两个条件中的列都是索引时,查询中才使用索引;否则,查询将不使用索引。

1.3 优化子查询

子查询可以一次性完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然可以使查询语句很灵活,但执行效率不高。执行子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。

在MySQL中,可以使用连接(JOIN)查询来替代子查询。连接查询不需要建立临时表,其速度比子查询要快,如果查询中使用索引,性能会更好。连接之所以更有效率,是因为MySQL不需要在内存中创建临时表来完成查询工作。

2 优化数据库结构

2.1 将字段很多的表分解成多个表

对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来,形成新表。因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。

2.2 增加中间表

对于需要经常联合查询的表,可以建立中间表,以提高查询效率。通过建立中间表,把需要经常联合查询的数据插入到中间表中,然后将原来的联合查询改为对中间表的查询,以此来提高查询效率。

2.3 增加冗余字段

设计数据库表时应尽量遵循范式理论的规约,尽可能减少冗余字段,让数据库设计看起来精致、优雅。但是,合理地加入冗余字段可以提高查询速度。表的规范化程度越高,表与表之间的关系就越多,需要连接查询的情况也就越多。

2.4 优化插入记录的速度

插入记录时,影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。

对于InnoDB引擎的表,常见的优化方法如下:

禁用唯一性检查;禁用外键检查;禁止自动提交。

2.5 分析表、检查表和优化表

分析表

  ANALYZE  TABLE tbl_name;

● Table:表示分析的表的名称。

● Op:表示执行的操作。analyze表示进行分析操作。

● Msg_type:表示信息类型,其值通常是状态(status)、信息(info)、注意(note)、警告(warning)和错误(error)之一。

● Msg_text:显示信息。

检查表

  CHECK  TABLE tbl_name;

 优化表

MySQL中使用OPTIMIZE TABLE语句来优化表,OPTILMIZE TABLE语句只能优化表中VARCHAR、BLOB或TEXT类型的字段。

  OPTIMIZE  TABLE tbl_name;

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django后端开发——模型层及ORM介绍

文章目录 参考资料Django配置MySQL安装mysqlclient创建数据库进入数据库的操作可能遇到的问题及解决方案Pycharm配置settings.py 模型![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c83753397bf6481d8defde26537903bf.png)ORM介绍示例终端&#xff1a;settings.py…

transformer 最简单学习1 输入层embeddings layer

词向量的生成可以通过嵌入层&#xff08;Embedding Layer&#xff09;来完成。嵌入层是神经网络中的一种常用层&#xff0c;用于将离散的词索引转换为密集的词向量。以下是一个典型的步骤&#xff1a; 建立词表&#xff1a;首先&#xff0c;需要从训练数据中收集所有的词汇&…

open3d DBSCAN 聚类

DBSCAN 聚类 一、算法原理1.密度聚类2、主要函数 二、代码三、结果四、相关数据 一、算法原理 1.密度聚类 介绍 基于密度的噪声应用空间聚类(DBSCAN)&#xff1a;是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分…

ALINX黑金AXU3EGB 开发板用户手册 CAN接口信号方向标识错误说明

如上篇文章 CAN收发器 SN65HVD232 的D R引脚方向是 D是输入&#xff0c;R是输出。 https://blog.csdn.net/zhengwenbang/article/details/136151668?spm1001.2014.3001.5501 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-10-1 PS 端 CAN 收发芯片的连接示意图&#xff0c;…

[深度学习] 深入理解什么是卷积神经网络

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[深度学习] ❤️ 热门学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

七、动态菜单—递归组件的使用

layout布局 左侧菜单menu页面刷新后默认高亮 左侧菜单组件 Menu <template><template v-for"(item, index) in menuList" :key"item.path"><!-- 没有子路由 --><template v-if"!item.children"><el-menu-item v-if&…

宇通壹基金交通安全训练营走进瑞金市九天社区

春节即将临近&#xff0c;孩子的安全是家长们最大的牵挂&#xff0c;培养良好的交通安全意识和出行习惯从日常教育做起。2月6日上午&#xff0c;瑞金赋能公益联合瑞金市九天社区新时代文明实践站&#xff0c;在九天御景小区开展宇通壹基金交通安全训练营进社区暨“关注交通安全…

机器人初识 —— 电机传动系统

一、背景 波士顿动力公司开发的机器人&#xff0c;其电机传动系统是其高性能和动态运动能力的核心部分。电机传动系统通常包括以下几个关键组件&#xff1a; 1. **电动马达**&#xff1a;波士顿动力的机器人采用了先进的电动马达作为主要的动力源&#xff0c;如伺服电机或步进…

【Docker】docker安装

需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Ubuntu安装docker 1、查看操作系统和CPU架构 2、卸载docker 3、配置docker下载源 4、安装docker 5、解决报错…

springboot745简历系统

springboot745简历系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

vue+springboot登录与注册功能的实现

①首先写一个登录页面 <template> <div style"background-color: #42b983;display: flex;align-items: center;justify-content: center;height: 100vh"><div style"background-color: white;display: flex;width: 50%;height: 50%;overflow: h…

力扣题目训练(13)

2024年2月6日力扣题目训练 2024年2月6日力扣题目训练492. 构造矩形495. 提莫攻击500. 键盘行166. 分数到小数199. 二叉树的右视图85. 最大矩形 2024年2月6日力扣题目训练 2024年2月6日第十三天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括简单题3道、中等题…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)

Hash数据结构 看过前面的介绍,大家应该知道 Redis 的 Hash 结构的底层实现在 6 和 7 是不同的,Redis 6 是 ziplist 和 hashtable,Redis 7 是 listpack 和 hashtable。 我们先使用config get hash*看下 Redis 6 和 Redis 7 的 Hash 结构配置情况(在Redis客户端的命令行界面…

图数据库 之 Neo4j - Cypher语法基础(5)

节点(Nodes) Cypher使用()来表示一个节点。 () # 最简单的节点形式&#xff0c;表示一个任意无特征的节点&#xff0c;其实就是一个空节点(movie) # 如果想指向一个节点在其他地方&#xff0c;我们可以给节点添加一个变量名(如movie)&#xff0c;表示一个变量名为 movie的节点…

后端扫盲系列 - vue入门指南

vue特点 组件化&#xff1a;用户界面分解为可重用的组件&#xff0c;这些组件可以使开发的页面更加模块化和可维护双向数据绑定&#xff1a;vue提供了一种轻松绑定数据和DOM元素之间的机制&#xff0c;意味着数据发送变化时&#xff0c;视图会自动更新&#xff0c;反之亦然虚拟…

阿里云香港轻量应用服务器怎么样,建站速度快吗?

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…

华为配置旁挂二层组网直接转发示例

配置旁挂二层组网直接转发示例 组网图形 图1 配置旁挂二层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

功能介绍 以51/STM32单片机作为主控系统&#xff1b; LCD1602液晶显示当前时间、温湿度、药品重量 3次吃药时间、药品类目和药品数量 HX711压力采集当前药品重量 红外感应当前药盒是否打开 DS1302时钟芯片显示当前年月日、时分秒、星期 DHT11采集当前环境温度和湿度 …

STM32学习·HAL库·STM32CubeMX系列学习(安装和使用)

目录 ​编辑 1. STM32CubeMX简介 2. STM32CubeMX安装 2.1 STM32CubeMX软件获取 2.1.1 获取Java软件 2.1.2 STM32CubeMX软件获取 2.2 搭建Java运行环境 2.3 安装STM32CubeMX软件 2.4 下载和关联STM32cube固件包 1. STM32CubeMX简介 STM32CubeMX 是 ST 微电子公…

HarmonyOS router页面跳转

默认启动页面index.ets import router from ohos.router import {BusinessError} from ohos.baseEntry Component struct Index {State message: string Hello World;build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加按钮&am…