MYSQL SQL优化总结【快速理解】

news2024/11/14 6:53:07

1、优化insert操作

        批量插入,防止大量与数据库进行访问

        手动控制事务,减少事务的频繁开启和提交。

        

        主键顺序插入

2、优化主键

        主键优化的点就是避免主键过长,因为如果有二级索引,叶子节点存储的数据时间上是主键,如果主键太长会造成存储压力过大。主键最好设置插入是自增的,避免乱序插入,如果乱序插入会造成也分裂现象严重消耗性能。

        1.页分裂现象

                 索引的叶子节点是按照索引的顺序进行排序的,如果乱序插入就会出现页分类现象这样会比较消耗性能。                   此时需要插入在47后面,但是47后面页空间不足了,就会出现页分裂现象,它会先开启一个新的页,然后把第一个页一半以上的部分数据移动到新的页里,也就是23,47这两条数据,然后将50插入47后面,最后再调整页的前后顺序。       

                这是调换之后的顺序,红箭头指示是调换之前的顺序。

        2.页合并现象

                当一个页删除的数据大于一半了,相邻页如果可以的话就会进行合并

                

                合并后

3、优化order by排序操作

        这个是通过EXPLAIN在查询前可以看到查询计划里的Extra部分里的提示,大概意思就是说如果出现Using index就是不需要全表扫描的情况。

       尽量使用覆盖索引,比如order by后面的一个字段,查出来的数据最多是id和这个字段,因为建立了这样的索引,所以第一次根据索引查,它的键就是字段,存的值就是id,一次性就能查出所需值。如果查询的值再多或者使用select * from 会进行回表查询,因为有许多数据不包含在这个索引内,此时条件允许可以设置对应值的联合索引。如果不非得直接查,除非通过id主键进行order by;

        所以order by后面的最好使用索引,这样就不会全表扫描而是走索引,但是这里有一点要说就是如果用的是联合索引的时候,不要违背最左前缀法则,对于where后的索引它是与书写顺序无关的,如果索引是ABC,写的时候ABC BCA CBA AB BA 这种都可以,但是order by就不一样了,它与书写顺序就有关了,它必须是ABC AB这种,并且如果排序升序与降序也要和当初创建的索引一致,默认索引排序是ASC,所以如果使用的话要提前考虑是否要设置对应的索引排序类型是ASC 还是DESC。

4、group by分组优化

        它优化起来也和order by 优化相似,在后面的自动加索引,并且遵循最左前缀法则,而且对书写顺序有关。

5、limit 优化

         用覆盖索引+子查询的方法,如果不支持子查询可以把索引覆盖查出的数据看做一张表进行条件查询。这样就可以降低一次性查出limit x,y中前x中的所有数据只查出一个id,然后通过id进行查询对应的数据,然后用或者在业务上记录下每次查的页数,如果查下一页就大于之前的页数,然后offset设置一个偏移页数,可以是一整页的数据,但是必须数据是自增的。

6、count优化

        有这么几种count(id),count(字段),count(1),count(*)        

        count(id) 将所有id拿出来计算,不用去判断是否为null,主键唯一且不为空

        count(字段)如果没有加not null 那么需要每次进行判断是否为null 然后取出来直接累加

        count(1)会遍历整张表,但不取值。服务层对每一行放进去一个1然后进行累加只要不为空。

        count(*) 有专门的优化不进行取值,直接累加。

        执行速度,后面两个快是因为他们不取值直接累加。

        count(字段)<count(id)<count(1)<count(*)  

7、update优化

        InnoDB引擎的三大特点就是 外键 事务 行级锁

        在默认的隔离级别的时候更新数据使用的是行锁,前提是使用的主键锁数据,但如果用非主键锁,那么此时会升级成表锁。为了让并发情况下更好,避免升级成表锁导致更新阻塞。

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

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

相关文章

深入计算机语言之C++:String的模拟实现

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;从C语言到C语言的渐深学习 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 一、模拟实现 string 库 1.1 string 的成员变量…

植物大战僵尸杂交版v2.6.1最新版本(附下载链接)

B站游戏作者潜艇伟伟迷于11月3日更新了植物大战僵尸杂交版2.6.1版本&#xff01;&#xff01;&#xff01;&#xff0c;有b站账户的记得要给作者三连关注一下呀&#xff01; 不多废话下载链接放上&#xff1a; 夸克网盘链接&#xff1a;https://pan.quark.cn/s/279e7ed9f878 新…

【Pikachu】目录遍历实战

既然已经决定做一件事&#xff0c;那么除了当初决定做这件事的我之外&#xff0c;没人可以叫我傻瓜。 1.目录遍历漏洞概述 目录遍历漏洞概述 在Web功能的设计过程中&#xff0c;开发者经常会将需要访问的文件作为变量进行定义&#xff0c;以实现前端功能的灵活性。当用户发起…

[ 网络安全介绍 5 ] 为什么要学习网络安全?

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

项目技术栈-解决方案-注册中心

项目技术栈-解决方案-注册中心 Zookeeper、Eureka、Nacos、Consul和Etcd参考文章 服务注册中心&#xff08;Registry&#xff09;&#xff1a;用于保存 RPC Server 的注册信息&#xff0c;当 RPC Server 节点发生变更时&#xff0c;Registry 会同步变更&#xff0c;RPC Client …

除了 Postman,还有什么好用的 API 测试工具吗

尽管 Postman 提供了团队协作的功能&#xff0c;但是免费版本的功能较为基础&#xff0c;付费版的价格对于小型团队或个人开发者来说可能较高。而且访问 Postman 有时会非常慢&#xff0c;太影响体验了。 鉴于上述局限性&#xff0c;Apifox 成为了一个很好的替代选择。Apifox …

WPF学习之路,控件的只读、是否可以、是否可见属性控制

C#的控件学习之控件属性操作 控件的只读、是否可以、是否可见&#xff0c;是三个重要的参数&#xff0c;在很多表单、列表中都有用到&#xff0c;正常表单控制可以在父层主键控制参数是否可以编辑和可见&#xff0c;但是遇到个别字段需要单独控制时&#xff0c;可以在初始化wi…

LabVIEW开发相机与显微镜自动对焦功能

自动对焦是显微成像系统中的关键功能&#xff0c;通常由显微镜的电动调焦模块或特定的镜头系统提供&#xff0c;而工业相机则主要用于高分辨率图像的采集&#xff0c;不具备独立的自动对焦功能。以下是自动对焦的工作原理、实现方式及实际应用案例。 1. 自动对焦的工作原理 &a…

IBM 开源的文档转化利器「GitHub 热点速览」

上周的热门开源项目&#xff0c;Star 数增长犹如坐上了火箭&#xff0c;一飞冲天。短短一周就飙升了 6k Star 的多格式文档解析和导出神器 Docling&#xff0c;支持库和命令行的使用方式。全新的可视化爬虫平台 Maxun&#xff0c;则在刚开源时便轻松斩获了 4k Star。而本地优先…

STM32完全学习——点亮LED灯

一、寄存器描述 首先我们知道STM32对外设的操作&#xff0c;是靠对寄存器的设置来完成的。因此我们想要点亮LED灯&#xff0c;就需要知道端口的控制寄存器&#xff0c;然后给寄存器设置不同的值就可以让端口来输出0或1&#xff0c;首先我这里使用的是GPIOA这个端口的0-8位来做…

【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)

文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用&#xff08;一&#xff09;索引的创建及数据组织&#xff08;二&#xff09;不同类型的索引&#xff08;三&#xff09;索引的额外属性 三、索引的优化与查询计划分析&#xff08;一&#xff09;通过prof…

约束(MYSQL)

not null&#xff08;非空&#xff09; unique&#xff08;唯一&#xff09; default&#xff08;默认约束&#xff0c;规定值&#xff09; 主键约束primary key&#xff08;非空且唯一&#xff09; auto_increment&#xff08;自增类型&#xff09; 复合主键 check&#xff08…

如何保证RabbitMQ的可靠性传输

文章目录 producer到broke生产者到交换机&#xff1a;confirm交换机到队列&#xff1a;returns模式队列溢出&#xff1a;可以采用死信等方式①ConfirmCallback接口②ReturnCallback接口 Broke内部Broke到达消费者 producer到broke 发送方确认 生产者到交换机&#xff1a;conf…

数据库参数备份

MySQL #!/bin/bash # 获取当前日期和时间的时间戳 TIMESTAMP$(date "%Y%m%d-%H%M%S")# 0、创建目录 mkdir /tmp/parameter_$TIMESTAMP/# 1、获取所有命名空间 echo "1、获取所有命名空间" NAMESPACES$(kubectl get ns | grep qfusion- | grep -v qfusion-…

拦截器实现http请求访问本地图片

本文来记录下拦截器实现http请求访问本地图片 文章目录 概述代码实现本文小结 概述 如下图&#xff0c;本机(服务器)存储的图片想要在浏览器上通过Url地址访问&#xff1a; 浏览器直接访问 代码实现 烂机器实现文件真实地址和物理地址之间的映射 Slf4j Configuration public cl…

【数据结构】快排之三路划分

目录 一、前言 二、 快排性能的关键点分析 三、 三路划分基本思想 四、 思路分析 五、提醒 六、代码实现 一、前言 继续对快速排序的深入优化进行探讨 二、 快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后&#xff0c;key对数组的分割。 如果每次选key都能…

Web安全之SQL注入---基础

文章目录 SQL注入简介SQL注入基础SQL注入分类SQL注入流程 SQL注入简介 什么是SQL注入&#xff1f; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理…

iOS 18.1,未公开的新功能

童锦程祖师爷曾说过&#xff1a;“发誓可以&#xff0c;发朋友圈不行。”表面上看是渣男语录&#xff0c;实际上也说明了人们对隐私的看重。 在当今生活中&#xff0c;智能手机可能是最私密的电子产品&#xff0c;没有之一。不管是照片、联系人、短信、APP数据&#xff0c;甚至…

网页版五子棋——对战模块(服务器端开发②)

前一篇文章&#xff1a;网页版五子棋——对战模块&#xff08;服务器端开发①&#xff09;-CSDN博客 项目源代码&#xff1a;Java: 利用Java解题与实现部分功能及小项目的代码集合 - Gitee.com 目录 前言 一、创建并注册 GameAPI 类 1.创建 GameAPI 类 2.注册 GameAPI 类 …

★ C++进阶篇 ★ 异常

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起学习C中的异常 ~ ​❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 C进阶篇专栏&am…