MySQL——常用SQL优化(二)

MySQL/Oracle数据库优化总结(非常全面) 阅读详情

一、优化insert语句。

当进行数据插入,insert语句的优化,可以考虑以下方式。

(1)、如果同时从同一客户插入很多行数据,应尽量使用多个值表的insert语句,这种方式将大大缩减客户端和数据库服务器之间的连接,关闭等消耗。使得效率比使用单个insert语句要快好几倍,下面是例子。

insert into  table values(1,1'),(2,'2'),(3,'3'),....,(n,'n');

(2)、如果从不同的客户插入很多行,可以通过使用INSERT DELAYED 语句得到更高的速度,DELAYED的含义是让INSERT 语句立马执行,其实数据都被放到内存的队列中,并没有真正写入磁盘,这比每条记录分别插入要快得多;LOW_PRIORITY 刚好相反,在所有其他用户对表的读写完成后才进行插入数据。

(3)、将索引文件和数据文件分在不同的磁盘上进行存放(利用建表中的选项)

(4)、如果进行批量插入,可以通过增加bulk_insert_buffer_size变量值得方法来提高速度。但是,这只能对MyISAM表有效。

(5)、当从一个文本文件装载一个表时,使用LOAD DATA INFILE 。这比使用insert语句要快20倍。

二、优化ORDER BY语句。

优化ORDER BY前,首先需要了解MySQL的排序方式。

使用命令:show  index from  tablename \G  查看表tablename的排序方式。

1、MySQL中有两种排序方式。

第一种方式:通过有序索引顺序扫描直接返回有序数据,这种方式在使用EXPLAIN方式查看SQL的执行计划时显示为USING INDEX ,不需要额外的排序,操作效率更高。例如:

第二种方式:通过对放回数据进行排序,也就是Filesort排序,所有不是通过索引排序直接返回排序结果都是Filesort排序,Filesort并不代表通过磁盘文件进行排序。而是说明了一个排序操作,至于排序操作是否使用磁盘文件或者临时表等。取决于MySQL服务器对排序参数的设置和需要排序数据的大小。

Filesort是通过相应的排序算法,将取得的数据在sort_buffer_size系统变量设置的内存排序区中进行排序,如果内存装载不了,它就会将磁盘上的数据进行分块,再对各个数据块进行排序,然后将各个快合并成有序的结果集。sort_buffer_size设置的排序区是每个线程独立占有的,所以同一时刻,MySQL中存在多个sort buffer排序区。

了解MySQL的排序后,优化就清晰了:尽量减少额外的排序,通过索引直接返回有序结果。where条件和order by使用相同的索引,并且order by  的顺序和索引的顺序相同,同时order by的顺序都是升序或者降序。否则肯定需要额外的排序操作,这样就会出现Filesort排序。

2、Filesort排序的优化。

通过创建合适的索引能够减少Filesort的出现,但是在某些特殊条件下,条件限制不能减少Filesort的消失,那就需要考虑如果让Filesort更快。对于Filesort排序,MySQL有两种排序算法。

a、两次扫描算法:首先需要根据条件取出排序字段和行指针信息,之后在排序区sort  buffer中排序,如果排序区sort Buffer中不够,则在临时表Temporary  Table中存储排序结果。完成排序后根据行指针回表读取记录,该算法是在MySQL4.1之前使用的,需要两次访问数据。第一次获得排序字段和行指针信息,第二次根据行指针记录获取数据,尤其第二次的读取数据,有可能导致大量的I/O操作;优点是排序的时候 ,内存开销小。

b、一次扫描算法:一次性读取满足条件的行的所有字段,然后再排序区sort Buffer中直接排序,输出结果集,排序的时候内存开销大。排序效率比两次扫描的要高。

MySQL通过比较系统变量max_length_for_sort_data的大小和Query语句取出的字段总大小来判断使用那种算法。如果max_length_for_sort_data大,使用两次扫算法,否则使用一次扫描算法。

适当加大系统变量max_length_for_sort_data的值,能够让MySQL选择Filesort排序算法。当然,如果max_length_for_sort_data设置过大,会造成CPU的利用率较低和磁盘I/O过高,CPU和I/O平衡就好。

适当加大sort_Buffer_size的值,尽量让排序在内存中完成。而不是通过创建临时表放到文件中进行排序。当然了,sort_Buffer_size的值也不能过大,这是每个线程独立占有的,会导致服务器SWAP严重。

尽量使用必要的字段,select具体的名称字段,而不是select * 选择所有的字段,这样可以减少排序区的使用。提高SQL性能。


用MySQL MCP 优化 SQL实战 最近几天都在优化之前的 SQL,一看 SQL 都是 5-6 个表连表还有各种子查询,看起来主打一个头大。正常的优化思路心路历程分享一下: 首先是查看每一个表的数据,根据表数据查询是否存在合理,然后根据数据量进行连表查询,由少到多的一个过程,尽可能减少表的行数,然后再根据对应的数据是否有索引覆盖。为什么要用 MCP?因为用 MYSQL MCP 可以减少自己对于字段的识别和查询,以及索引是否覆盖。 阅读详情

相关推荐

【第20天】MYSQL进阶-查询优化- performance_schema系列二:常用配置详解(SQL 小虚竹)

SQL进阶-查询优化- performance_schema系列二:常用配置详解

小虚竹的专栏 1万+

mysql not in优化_mysql高级(三)——sql调优

原文:https://blog.youkuaiyun.com/u011702633/article/details/82726547小表驱动大表使用in的sql:select * from A where id in (select id from B)等价于:for select id from Bfor select * from A where A.id = B.id当B表的数据小于A表的数据...

weixin_39806065的博客 253

【STM32单片机】RS485通信—基于STM32G474芯片

做项目需要用485通信来控制Go电机参考资料:【【STM32F103C8T6系列】10. 实验例程——485(USART串口)通讯实验】 https://www.bilibili.com/video/BV19w411r7ka/?PDF: STM32G474 开发指南 正点原子 DMG474 开发板教程 第28章485只是物理层,代码逻辑还是UART串口通信,相当于是电路有RS485转换芯片,所以还是用UART串口通信方式。

m0_48808835的博客 3647

mysql 部分数据排序_MySQL中排序在SQL优化中的部分解析

在MySQL中,相关的复制的sql语句,会对所要搜取得结果进行规整,这里就有排序,分组,统计等相关整理过程,其中排序的算法的意义最为重要,在mysql不同的版本中,特别是在5.1系列以后对排序算法的定义不断加强改善;在排序算法中对新旧算法当中提到的阵列的宽度,以及函数搜取的范围,大小,影响的高度等都进行了修改,并设置相关的阀值,以指导相关的参数自动闭合;以下是在5.5系列中相关的sort文件截取;...

weixin_42510019的博客 352

进阶数据结构——链式前向星

链式前向星是一种进阶的数据结构,主要用于图的存储。我希望大家先看这个视频(蓝色字体点进去) 不然你很难理解的。在图论中,图的存储方式主要有邻接矩阵和邻接表两种。邻接矩阵虽然建图简单方便,但占内存较大,节点数量稍微大点的题目就难以使用(适合稠密图);而邻接表虽然节省空间,但其指针形式难写易错,且vector形式的读取速度较慢,易导致大数据下的超时(TLE)。针对上述问题,链式前向星作为一种折中的方式应运而生。链式前向星本质上是一种静态链表,它将数据以链表形式连接在一起。

ycs66的博客 2138

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码)

本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。

weixin_29179311的博客 417

MySQL中级优化教程(二)——常用SQL语句优化与解析

您可以到这里下载本篇博文所使用的数据库以及优化工具mysqldumpslow和pt-query-digest: https://blog.youkuaiyun.com/IT_TIfarmer/article/details/92224646 关于explain语句的结果参数详解也可以参考如上博文。 在优化之前,我们首先应该知道什么样的SQL需要我们去优化: 1、查询次...

待到春花烂漫时 1万+

【Cadence】Virtuoso@LayoutXL 差分电路版图同步修改

对于差分电路,器件和部分走线通常是对称的,只需要画一半,另一半通过镜像操作完成。因此,需要对差分电路进行同步的修改,保证电路的差分对称性和正确的连接关系。然而,通常版图会经过多次修改,修改的部分可能在镜像的时候被遗漏。左边画了金属块,右边也出现了同步出现了金属块。进入group会有同步复制的提示。

乾巽的博客 3052

Mysql:SQL优化常用手段及explain使用(二)

本文通过五个典型案例展示了使用EXPLAIN进行SQL调优的方法:1)通过添加单列或复合索引优化全表扫描;2)利用复合索引消除文件排序;3)创建覆盖索引提升查询效率;4)遵循最左前缀原则设计索引;5)避免索引失效场景(如列运算、函数、类型转换等)。文章还介绍了高级调优技巧,包括JSON格式分析、EXPLAIN ANALYZE、优化器提示和索引使用统计,强调EXPLAIN是发现问题的手段,最终目标是通过索引优化、SQL改写等方案解决性能瓶颈。

简单易懂学技术 242

高压脉冲发生器的各种电路图

高压脉冲发生器的各种电路图

qq_65102825的博客 5907

不带DDR的ZYNQ使用OCM加载程序运行的方法

软件版本:Vivado Vitis2019.2 第一步: 在Vivado的ZYNQ Block Design时候不配置DDR 第二步: 在Vitis中: 1、 在Vitis中新建Platform,选择xsa文件: 2、 在xparameters.h中添加DDR的地址空间定义,如下: 3、 修改链接文件,修改每个段都到ram_0,因为ram_1空间全部给到应用程序 4、 修改fsbl工程的main.c,增加XPAR_PS7_DDR_0条件编译 5、 修改fsbl.h,重定义DDR_EN

hpf247的博客 5536

sql优化常用的几种方法:19种最有效的sql优化技巧

我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下:1、EXPLAIN做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。下面来个简单的示例,标注(1、2、3、4、5)我们要重点关注的数据:MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from t where num in(1,2,3) 对于连续的数值,能用between就不要用in了;再或者使用连接来替换。3、SE

Lost_in_the_woods的博客 3万+

Python+Vue计算机毕业设计风电场监控系统的设计与实现7bd6i(程序+LW+源码+部署)

Python3.7.7+Django+Mysql5.7+pip list+HBuilderX(Vscode也行)+Vue+Pychram社区版。2. 前端:vue+css+javascript+jQuery+easyUI+highcharts。2.IDE环境:Python和Python 社区版都可以。Django + Vue +Python+Mysql 等等组成,B/S模式等等。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。1. 后端:Python、Vue、Django、Mysql。

华信计算机毕设源码程序 343

MYSQL【二、SQL 优化】

慢SQL定位、优化慢SQL、查询深分页、执行计划 explain

天行健,君子以自强不息 999

AutoSAR系列讲解 - 前言

博主xyfx是一名汽车行业的嵌入式软件工程师,本职工作是同步电机的驱动控制(主要做FOC的,这个大家要是有兴趣,以后可以单独开一个专栏来讲解一下),由于做控制器的时候需要用到AutoSAR,所以特意的去学习了相关知识,同时博主自己也在同步提高中,有写的不合理的地方也请大家指正。我准备对AutoSAR开设两个大的方面来讲解,一是AutoSAR的入门篇,二是AutoSAR的实践篇,分别讲述AutoSAR的理论基础和工具的使用。

雪云飞星的博客 4万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MySQL-SQL优化

MySQL性能调优的相关知识,包括SQL性能分析和SQL优化等。

m0_53222084的博客 3833

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL SQL和索引优化总结

文章目录一、SQL语句和索引的优化二、应用优化三、MySQL Server优化1. 自适应哈希索引2. redo log3. MySQL查询缓存4. MySQL线程缓存5. 并发连接数量和超时时间 首先我们需要知道MySQL主要是从以下3个方面进行优化: SQL语句和索引 应用优化(引入缓存、连接池) 配置参数优化 一、SQL语句和索引的优化 当数据量比较大,若SQL语句写的不合适,会导致SQL的执行效率低,我们需要等待很长时间才能拿到结果 针对性优化的时候,若数据量太大,可通过limit分页 exp

长期更新自学笔记 4759

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MySql 常用SQL语句、 SQL优化

SQL语句主要分为五类:数据定义语言(DDL)用于管理数据库结构,数据查询语言(DQL)用于检索数据,数据操纵语言(DML)用于增删改数据,数据控制语言(DCL)用于权限管理,事务控制语言(TCL)用于事务管理。键约束方面,超键能唯一标识行,候选键是最小超键,主键是选定的候选键,外键则关联表间数据。SQL约束包括非空、唯一、主键、外键、检查及默认值约束,确保数据完整性。

weixin_44289947的博客 1348

MySQL 索引及SQL优化

MySQL 索引设计及失效情况,SQL优化

青竹暖回阳的博客 2322

sql优化常用的几种方法,19种最有效的sql优化技巧

sql优化常用的几种方法,19种最有效的sql优化技巧 本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 1、EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。 下面来个简单的示例,标注(1、2、3、4、5)我们要重点关注的数据: type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。 key_len列,索引长度。 rows.

qq_42046421的博客 9164

MYSQL SQL优化思路和方法

Mysql SQL优化思路和优化方法......

陈泽钦的博客 1712

MySQL——SQL优化

SQL优化是提升数据库性能的关键。本文总结了17个SQL优化技巧,包括避免SELECT*、使用UNION ALL代替UNION、小表驱动大表、批量操作、合理使用LIMIT等查询优化方法。同时介绍了索引优化原则、数据库结构优化策略,以及如何通过执行计划分析、分页优化、配置调整等提高性能。文章还强调了避免大事务、使用存储过程等建议,并指出SQL优化需要结合具体业务场景持续进行。通过遵循这些优化策略,可以显著提升查询效率和数据库整体性能。

hj945218的博客 1055

MySQL优化之SQL优化详解

sql优化详解

个人博客,欢迎收藏。 1591

MySQL中常用的SQL优化方法

SQL优化的方法有很多种,针对平时的情况总结一下几种: 以下用到的表和数据,可以通过这篇文章中的语句添加: MySQL执行计划explain的详解_蓝星部队的博客-优快云博客一、如何查看SQL执行计划:在MySQL中生成执行计划的方法很简单,在SQL语句前面加explain既可。explain可以作用于SELECT/INSERT/UPDATE/DELETE和REPLACE语句。二、执行计划输出列解读:当使用explain时,输出中包含的列为:id,select_type,table,type,poss

蓝星部队的博客 2295

MySQL SQL优化过程

本文旨在深入探讨MySQL SQL优化的过程,从基础概念到高级技巧,通过多个代码示例,帮助初学者和有经验的开发者掌握SQL优化的核心策略。通过上述步骤和技巧,你可以逐步提升自己的SQL技能,使你的应用在面对日益增长的数据量时仍然保持高性能。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身农奴把歌唱,数据库的性能会随数据量增长而变化,定期执行查询分析和优化是必要的。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 947

mysql 常用sql调优_MySQL 常用SQL优化

MySQL 常用SQL优化:一.大批量插入数据:1.对于load MyISAM存储引擎的表,可以通过关闭打开MyISAM表非唯一索引的更新来提升导入速度:例:mysql > alter table tbl_name disable keys;mysql > load data infile ‘/home/mysql/tbl_name.txt’ into table tbl_name;m...

weixin_42123456的博客 914
上一篇: MySQL——常用SQL优化(一)
下一篇: MySQL——常用SQL优化(三)
spring_model
博客等级 码龄11年 36粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值