Mysql总结2

Mysql慢优化

在mysql中,long_query_time的值为10,当sql语句执行的时间超过这个数值时,则会被记录到慢查询日志中。

Mysql语句查询流程

1、客户端发送sql语句到服务端;

2、服务端查看是否打开了缓存,若缓存打开,则查询缓存,若缓存命中,则直接返回从缓存中查询到的数据(在Msyql8.0中,已没有缓存的概念);

3、使用分析器对sql语句进行语法分析,判断其是否有语法错误;

4、通过优化器生成后续执行计划;

5、通过执行器调用存储引擎的接口,执行sql语句。

定位慢sql的方法

日志查询:开启慢查询日志,并使用mysqldumpslow等命令分析慢查询日志,查找到慢sql语句。

服务监控:从业务的根基监控慢sql,主要通过字节码插桩、连接层扩展、使用ORM框架等方式,对服务中的慢sql进行监控和警示。

定位到慢sql后,通过explain命令对sql语句进行分析,查看慢sql的如何执行。

优化sql的方式

避免过多的列查询

进行查询时,尽量避免使用select *,使用select 列名的方式进行查询,只查询需要的列。

对于分页优化,通过延迟关联、书签两种方式。

延迟关联

对于延迟关联,在偏移量很大时,如limit 10000,10需要查询10010条数据然后舍去前10000数据,这样会造成不必要的查询资源浪费,因此可使用延迟关联,如下列sql:

select * from a where tid = "1" limit 10000,10

该语句可被优化为先查询所需要的id,这些必须要满足tid="1"的条件,且limit同条件同为10000,10,因为未优化前,要先满足tid = "1"才能查询对应的偏移量,优化后的sql语句如下:

select * from a where id in (select id from a where tid = "1" limit 10000,10)

in后面仅查询了id一个属性,因此浪费的查询开销更小,最后通过in只需要查询10条需要的数据。

该方法的主要思路是查询出需要的主键,然后主键表关联原表即可。

书签

对于书签,通过记录上一次查询返回的最后一行数据,下一次查询时从这个数据开始,避免了重复行的查询,一般通过属性>last_max_id作为条件,查询时不需要offset,只需要查询的数据即可。

索引优化

索引覆盖

使用非主键索引查询时需要回表,但如果索引的叶子节点中已包含了要查询的字段,则不需要进行回表查询,这种方法就是索引覆盖。将需要查询的字段与主键一起建立联合索引。

避免使用<>、!=等操作符

使用上述操作符会导致索引失效,可考虑使用>、<、=、between等代替上述操作符。

适当使用前缀索引

前缀索引适用于前几位区分度较大、字段长度很大的字段查询,如查询邮箱时,由于格式一般为@xxx.com,因此比较适合使用前缀索引,添加的方式:

alter table a add index index2(email(6))

对于前缀索引,无法进行

避免在索引列上使用函数

在索引列上使用函数会导致索引失效,因为首先需要计算出函数值后再进行比较等操作,这样无法利用索引。

正确使用联合索引

对于联合索引的使用,需要满足最左前缀原则(也称最左匹配原则),指的是使用联合索引时查询条件从索引的最左侧的列开始,不跳过中间的列。

join优化

优化子查询

对于where、select列表中的子查询,往往会导致性能问题,因为可能会为每一行的外层查询执行一次子查询,而使用join可以对其进行优化。如下列sql语句,使用子查询的方式如下:

select * from a where id in (select id from b);

那么查询a的每一行时,会执行子查询select id from b,导致性能下降,此时可使用join来进行优化:

select * from a ioin b on a.id = b.id

此时连接后表中只有a、b数据表中id相等的数据行,和上述sql语句是等效的,同时减少了循环查询的次数。

小表驱动大表

在执行 join 操作时,尽量让行数较少的表驱动行数较多的表,这样可以减少查询过程中需要处理的数据量,同时连接得到的数据表的额外数据量也更少,减少了空间浪费,如下列sql语句:

select * from A left join B on A.id = B.id

其中A数据表数据量较小,B数据表数据量较大。

适当增加冗余字段

对于一些查询频率较高的字段,可考虑使用增加冗余字段,在查询时不用使用join关联其他数据表,直接查询即可。

避免使用join关联过多的表

一般使用join关联不超过3个数据表。

union优化

union是用于关联两个或多个select查询的结果,对于使用union查询的语句,可将where、limit等条件查询语句,下推到各select中,每个分支仅处理满足条件的数据,减少了不必要的数据合并和过滤,如下列语句,在未实现条件下推时的查询如下:

select * from(select * from aunionselect * from b
)as c
where c.id = 1; 

条件下推后,sql语句如下:

select * from a where id = 1
union 
select * from b where id = 1;

除上述方法外,还可利用索引的有序性,按照索引顺序扫描得出的自然有序结果,从而避免了排序操作。

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

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

相关文章

AIGC绘画设计基础-建筑设计应用

一、AI及AIGC 对于AI大家都不陌生&#xff0c;但是AIGC这个概念好多人其实不大清楚。“AI”是指人工智能技术本身&#xff0c;而“AIGC”是指基于人工智能技术而生成的内容。 生成式人工智能——AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;&…

近邻算法详解

近邻算法&#xff08;Nearest Neighbor Algorithm&#xff09;&#xff0c;也称为K-近邻算法&#xff08;K-Nearest Neighbors&#xff0c;KNN&#xff09;&#xff0c;是一种基本的分类和回归方法。它的工作原理非常直观&#xff1a;通过测量不同特征点之间的距离来进行预测。…

使用CommandLine库创建.NET命令行应用

CommandLine是一个.NET库&#xff0c;用于创建命令行应用程序。它提供了一种简单的方法来解析命令行参数&#xff0c;并且可以帮助您构建一个功能强大的命令行界面。在本文中&#xff0c;我们将介绍如何使用CommandLine库创建.NET命令行应用程序。 1. 背景 在.NET开发中&#…

SpringFramework实战指南

二、SpringFramework实战指南 目录 一、技术体系结构 1.1 总体技术体系1.2 框架概念和理解 二、SpringFramework介绍 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模块2.3 SpringFramework 主要优势 三、Spring IoC容器和核心概念 3.1 组件和组件管理概念3…

起底震网病毒的来龙去脉

2010年&#xff0c;震网病毒被发现&#xff0c;引起世界哗然&#xff0c;在后续的10年间&#xff0c;陆陆续续有更多关于该病毒的背景和细节曝光。今年&#xff0c;《以色列时报》和《荷兰日报》又披露了关于此事件的更多信息&#xff0c;基于这些信息&#xff0c;我们重新梳理…

优于InstantID!中山大学提出ConsistentID:可以仅使用单个图像根据文本提示生成不同的个性化ID图像

给定一些输入ID的图像&#xff0c;ConsistentID可以仅使用单个图像根据文本提示生成不同的个性化ID图像。效果看起来也是非常不错。 相关链接 Code:https://github.com/JackAILab/ConsistentID Paper&#xff1a;https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

计算机毕业设计 | springboot养老院管理系统 老人社区管理(附源码)

1&#xff0c;绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院&#xff0c;经过我们前期的调查&#xff0c;院方大部分工作采用手工操作方式,会带来工作效率过低&#xff0c;运营成本过大的问题。 院方可用合理的较少投入取得更好…

Python数据可视化(七)

绘制 3D 图形 到目前为止&#xff0c;我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面&#xff0c;我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…

三、Gazebo中实现机器人仿真(小白上手)+ubuntu18.04

接上一篇文章 1、\导航 vim .bashrc \先采用Nanocar尝试导航 关闭终端&#xff1a;roslaunch robot_navigation gmapping.launch simulation:true rosrun teleop_twist_keyboard teleop_twist_keyboard.py 重启终端&#xff1a; cd catkin_ws source ./devel/setu…

护网经验面试题目原版

文章目录 一、护网项目经验1.项目经验**Hvv的分组和流程**有没有遇到过有意思的逻辑漏洞&#xff1f;有没有自己开发过武器/工具&#xff1f;有做过代码审计吗&#xff1f;有0day吗有cve/cnvd吗&#xff1f;有src排名吗&#xff1f;有没有写过技战法有钓鱼经历吗&#xff1f;具…

【数据结构】哈夫曼树和哈夫曼编码

一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列&#xff0c;将序列中的所有元素作为叶子节点构建一棵二叉树&#xff0c;并使这棵树的带权路径长度最小&#xff0c;那么我们就得到了一棵哈夫曼树&#xff08;又称最优二叉树&#xff09; 接下来是名词解释&#xff1a; 权&a…

VC++位移操作>>和<<以及逻辑驱动器插拔产生的掩码dbv.dbcv_unitmask进行分析的相关代码

VC位移操作>>和<<以及逻辑驱动器插拔产生的掩码dbv.dbcv_unitmask进行分析的相关代码 一、VC位移操作符<<和>>1、右位移操作符 >>&#xff1a;2、左位移操作符 <<&#xff1a; 二、逻辑驱动器插拔产生的掩码 dbv.dbcv_unitmask 进行分析的…

如何使用Suno:免费的AI歌曲生成器

文章目录 Suno AI 是什么&#xff1f;Suno AI 如何工作&#xff1f;选择Suno AI的理由&#xff1a;核心优势易于操作多样化创作灵活的定价策略版权保障技术突破 如何使用Suno AI创作歌曲&#xff1f;第1步&#xff1a;注册Suno AI账户第2步&#xff1a;输入提示词创建第 3 步&a…

作业-day-240522

思维导图 使用IO多路复用实现并发 select实现TCP服务器端 #include <myhead.h>#define SER_IP "192.168.125.112" #define SER_PORT 8888int main(int argc, const char *argv[]) {int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd -1){perror("socket er…

脆皮之“字符函数与字符串函数”宝典

hello&#xff0c;大家好呀&#xff0c;感觉我之前有偷偷摸鱼了&#xff0c;今天又开始学习啦。加油&#xff01;&#xff01;&#xff01; 文章目录 1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现3.1 strlen 的使用3.1 strlen 的模拟1.计算器方法2.指针-指针的方…

Python的shutil模块探索,文件操作的瑞士军刀

hello&#xff0c;大家好&#xff0c;我是一点&#xff0c;专注于Python编程&#xff0c;如果你也对感Python感兴趣&#xff0c;欢迎关注交流。 希望可以持续更新一些有意思的文章&#xff0c;如果觉得还不错&#xff0c;欢迎点赞关注&#xff0c;有啥想说的&#xff0c;可以留…

每周刷题第三期

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 题目一&#xff1a;环形链表 题目二&#xff1a;删除有序数组中的重复项 题目三&#xff1a;有效的括号 题…

从左上角到右下角的最小距离和

题目描述&#xff1a;给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角&#xff0c;沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和&#xff0c;返回最小距离累加和。 way&#xff1a;无他&#xff0c;dp[i] [j]表…

《队列》

描述 学校体操队到操场集合&#xff0c;排成每行2人&#xff0c;最后多出1人;排成每行3人&#xff0c;也多出1人。分别排成每行4、5、6人&#xff0c;都多出1人。当排成每行7人时&#xff0c;正好不多,求校体操队至少多少人。 输入描述 无 输出描述 满足要求的人数 样例输入…