【MySQL】SQL优化

news2024/11/17 23:49:27

上一篇索引是针对查询语句进行优化,但在MySQL中可不仅有查询语句,针对其他的SQL语句同样也能进行优化

文章目录

  • 1.插入数据
  • 2.主键优化
  • 3.order by 优化
  • 4.group by优化
  • 5.limit优化
  • 6.update优化

1.插入数据

插入数据所使用的关键字为insert,SQL语句为

insert into 表名(字段1,字段2......) values(1,2......); 

这样插入数据一次只能插入一条数据,相对来说效率是比较低的,虽然values后面可以跟多个括号,但如果是几万,几十万条数据呢
这时候insert的性能就不能满足我们的需要了,我们需要另一条指令:load
load指令可以将本地磁盘文件的数据直接加载到数据库中

设置local_infile参数,开启从本地加载文件导入数据的开关:
  set global local_infile=1;
使用load导入数据:
  load data loacl file 文件路径 into table 表名 fields terminated by 分隔符 lines terminated by 分隔符(这里是每一行数据之间的分隔符);

2.主键优化

设计原则:

  1. 尽量降低主键长度(因为二级索引叶子结点存储的是主键,所以主键过长的话也会影响查询效率)
  2. 插入数据的时候尽量选择顺序插入,选择auto_increment自增主键(乱序插入会产生页分裂的情况,下面会介绍)
  3. 避免对主键进行修改

在InnoDB引擎里面,表数据都是根据主键顺序组织存储的,这种存储方式的表称为索引组织表(IOT)
介绍页分裂之前先回顾下InnoDB引擎的逻辑存储结构,由大到小为:表空间->段->区->页->行
页是InnoDB磁盘管理的最小单元,一个页的大小默认为16k,64个页为一个区
假设现在插入数据是主键乱序插入,这里就只显示叶子节点了
在这里插入图片描述
因为B+Tree的叶子节点是有序的,所以15应该要放在页1,但现在页1满了,此时就会开辟一个新的页,然后来到页1中间的位置,把一半的数据移动到新的页中,然后15再插入到后面,页之间的指针也会改变
在这里插入图片描述
相对应的也有一个页合并的情况:
当我们删除一条数据的时候,这条数据实际上并没有被删除,而是会被标记为删除状态,此时这条数据占据的空间是可以被使用的,当页中的删除标记达到阈值(默认为页的50%),InnoDB引擎就会查看相邻的页是否能够进行合并,如果可以的话就会进行合并

3.order by 优化

MySQL中的排序有两种操作

  • Using filesort : 通过索引或扫描读取满足条件的数据,然后在排序缓冲区完成排序操作
  • Using index : 通过有序索引直接返回有序数据
    很显然Using index的效率要高
    所以order by排序尽量选择有索引的字段,但需要注意的是多字段排序的情况
  1. 多字段排序也遵循最左前缀法则
  2. 如果多字段排序是一个升序,一个降序,那么在创建索引的时候需要指明,否则就是Using filesort操作

4.group by优化

group by操作是使用临时表,这个操作效率比较低
group by通常是和select进行搭配使用,那么使用索引同样可以提高group by的效率,这里索引同样也遵循最左前缀法则

5.limit优化

limit需要优化的场景主要是我们需要查询的数据在数据表中靠后的位置并且整个表的数据量比较大的时候,比如limit 10000000,10这种
优化方案首先是select后面尽量不要写"*",然后是使用子查询

6.update优化

update需要注意的问题是行锁升级为表锁
行锁和表锁在这里简单介绍下,简单来说行锁就是锁住一行的数据,表锁就是锁住整个数据表的数据
在使用update进行修改数据的时候一般都会加上条件,InnoDB引擎的行锁是针对索引的,所以字段如果有索引就是行锁,否则就是表锁,并且索引不能失效,否则也会升级为表锁

SQL优化到这结束,下一篇是视图,完

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

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

相关文章

Huntly: 一款超强大的自托管信息管理工具,支持管理RSS、自动保存网页、稍后阅读

Huntly是一款开源的自托管信息管理工具,旨在帮助用户更好地管理和处理各种信息。Huntly可以通过管理RSS、自动保存网页和稍后阅读等功能来帮助用户更有效地收集、保存和浏览信息。 github 地址:GitHub - lcomplete/huntly: Huntly, information manageme…

服务器的基本概念与初始Ajax

1. 客户端与服务器 1.1 上网的目的 刷微博、看新闻、听歌、看电影。。。 本质目的:通过互联网的形式来获取和消费资源 1.2 服务器 上网过程中,负责存放和对外提供资源的电脑,叫做服务器。 1.3 客户端 上网过程中,负责获取…

如何用ChatGPT搭建品牌文本体系?(品牌名+slogan+品牌故事)

该场景对应的关键词库(26个): 品牌名、奶茶、中文名、情感联想度、饮料、价值观/理念、发音、slogan、产品功能导向、行业性质导向、经营理念导向、消费者观念导向、口语化、修辞手法、品牌故事、创始人初心品牌故事、里程碑事件故事、产品初…

OpenPCDet系列 | 3.框架训练准备流程

文章目录 训练准备流程1. dataloader部分2. network部分3. optimizer部分4. scheduler部分训练准备流程 对于OpenPCDet中模型的训练过程如下所示,在训练前一般需要进行4个部分的准备:数据准备、网络模型准备、以及优化器和学习率调度器。下面对这4个大部分分别介绍。主要就是…

【PWN刷题__ret2syscall】[Wiki] ret2syscall

初次接触到ret2syscall,而ret2syscall的题目目前没有在各大平台的题目类型筛选中找到,所以还是刷一刷Wiki的经典题目吧!过程中遇到很多问题,包括偏移量的计算、ret2syscall原理的理解等等。尝试以萌新的视角,来分享、解…

我们给AutoGPT写了个插件,手把手看看它的玩法~

目录 先保证你电脑里安装了 Python,然后使用的第一步是安装运行需要的库,这需要你输入这行代码 它会安装这个 txt 文件里面所有的库,比如openai库是用来调用 ChapGPT 的功能,beautifulsoup4库是用来解析网页内容等等。 到此为止…

间谍软件开发商利用漏洞利用链攻击移动生态系统

导语:间谍软件开发商结合使用了零日漏洞和已知漏洞。谷歌TAG的研究人员督促厂商和用户应加快给移动设备打补丁的步伐。 间谍软件开发商利用漏洞利用链攻击移动生态系统去年,几家商业间谍软件开发商开发并利用了针对 iOS 和安卓用户的零日漏洞。然而&…

Vue3项目中使用ECharts图表并实现自适应效果

文章目录 一、Vue3项目安装ECharts二、引入、使用ECharts1.创建图表组件,并在父组件中引入使用2.引入ECharts3.ECharts图表自适应 总结 一、Vue3项目安装ECharts 在项目中输入如下代码: npm install echarts --save安装完成可以在package.json中看到&a…

Vuex在项目中的实际应用

前言 最近让我搞一个关怀版本的系统。纯纯前端、无语死。就是整个系统的字体还有框框啥的变大。简单暴力的做法就是重新写一套样式咯,这不纯纯累死人啊。琢磨了一下,如果可以保存关怀版的一个标志,然后全部组件都可以获取到该标志。通过该标志,然后动态的指定类的样式。 V…

从状态机的角度看 HTML 实体编码的解析:你知道 HTML 实体编码处于哪些位置时可以被正常解析吗?

文章目录 参考描述HTML 实体编码HTML 实体编码为什么需要 HTML 字符编码支持特殊字符和符号避免语法冲突 HTML 实体编号与实体字符常用字符所对应的 HTML 实体编码 HTML 实体编码与 HTML 解析器状态机有限状态机HTML 解析器HTML 与有限状态机HTML 解析器与 HTML 实体编码属性值…

python-11-多线程模块threading

python使用多线程实例讲解 1 进程和线程 1.1 进程和线程的概念 进程(process)和线程(thread)是操作系统的基本概念。 进程是资源分配的最小单位,线程是CPU调度的最小单位。 线程是程序中一个单一的顺序控制流程,进程内一个相对独立的、可调度的执行单…

如何充分利用实时聊天系统?

随着商业和电子商务领域经历快速的数字革命,必须迅速适应的一个因素是我们与客户的互动方式。几年前,电子邮件和电话还是主要的客户联系方式。如今,客户期望更好的服务和更即时的沟通。实时聊天支持系统可以解决此问题,如SaleSmar…

【消息中间件】如何解决RocketMQ消息堆积的问题

文章目录 一、背景二、MQ消息堆积三、消息堆积常见于以下几种情况:四、解决上述问题需要做到五、如何解决消息堆积和延迟问题 一、背景 消息处理流程中,如果客户端的消费速度跟不上服务端的发送速度,未处理的消息会越来越多,这部…

day25_新特性

今日内容 零、 复习昨日 一、JDK8新特性介绍 二、接口新特性 三、Lambda表达式 四、函数式接口 五、Stream流 六、新日期API 零、 复习昨日 晨考 一、JDK8新特性 接口中默认方法静态方法 − 默认方法就是一个在接口里面有了一个实现的方法。静态方法就是接口中有个已经使用的静…

Windows下安装QT

一、Windows下安装QT 1、QT官网 QT官网:https://download.qt.io/,打开官网地址,如下: 目录结构介绍 目录说明snapshots预览版,最新的开发测试中的 Qt 库和开发工具onlineQt 在线安装源official_releases正式发布版&am…

2023,滴滴“摸着自动驾驶过河”

在“滴滴网约车”的出行领域,出行网络和数据量级是滴滴自动驾驶的优势。但就自动驾驶技术本身来看,滴滴仍然需要展示更多的肌肉。 作者|斗斗 出品|产业家 滴滴自动驾驶有了新动作。 一款“人性化”的概念车、两个加速实现量产L4级车辆的自研硬件、一…

【攻略】北京国际鲜花港

文章目录 一、概述二、经典景观1.万花馆2.花艺中心3.花神广场4.瑞云坪5.百花田6.奇石园7.梅园8.唐草园9.幻花湖10.大地花海11.白滩12.樱花大道13.海棠园 三、网友点评四、注意事项五、北京其他景点推荐 北京国际鲜花港_360百科北京顺义区十大著名景点—2、北京顺义国际鲜花港 -…

C嘎嘎~~ [类 下篇]

类 下篇 1.类的6个默认成员函数2.构造函数2.1 构造函数出现的原因2.2 特性2.3 深刻解读---构造函数可以重载2.4 深刻解读---默认构造函数补充: 3.析构函数3.1概念3.2 特性3.3深刻解读例子 总结 4.拷贝构造函数4.1 概念4.2 特性4.3深刻解读---拷贝构造是构造的一种重载4.4深刻理…

【Linux网络】传输层中UDP和TCP协议

文章目录 1、再谈端口号2、UDP协议3、TCP协议3.1 TCP协议段格式3.2 TCP的三次握手和四次挥手(连接管理机制)3.3 TCP的滑动窗口3.4 TCP的流量控制3.5 拥塞控制3.6 延迟应答和捎带应答3.7 面向字节流和粘包问题3.8 TCP总结 1、再谈端口号 端口号port标识一…

动态规划算法——40道leetcode实例入门到熟练

目录 t0.解题五部曲1.基础入门题目1.509. 斐波那契数2.70. 爬楼梯3.746. 使用最小花费爬楼梯4.62. 不同路径5.63. 不同路径 II6.343. 整数拆分7.96. 不同的二叉搜索树 2.背包问题1.01背包(二维数组实现)2.01背包(滚动数组实现)1.4…