【示例】MySQL-SQL语句优化
前言
本文主要讲述不同SQL语句的优化策略。
SQL | DML语句
insert语句
-
插入数据的时候,改为批量插入
-
插入数据的时候,按照主键顺序插入
-
大批量插入数据的时候(百万),用load指令,从本地文件载入(需要在全局变量中开启,从而允许load指令)
update
注意更新语句的检索条件,尽量选择有索引的列;尽量选择主键索引。
- 当使用索引的时候:InnoDB引擎下执行update语句,添加的是行锁;当使用主键索引的时候,能减少回表查询
# 该事务下使用的锁是:行锁
update course set name = 'javaEE' where id = 1;
- 当没有索引或者索引失效的时候,会从行锁升级为表锁:
# 该事务下使用的锁是:表锁
update course set name = 'SpringBoot' where name = 'PHP' ;
SQL | DQL语句
order by
MySQL的排序有两种方式,尽量使用Using index:
-
Using filesort:将满足条件的数据行放到sort buffer中完成排序操作。使用索引或不使用索引的情况,都有可能出现该种排序方式 -
Using index:通过有序索引,按照顺序扫描,直接返回有序数据,不需要额外排序。效率要高于Using filesort
不同场景下,会选用不同的排序方式,也有某些场景,两种排序方式都存在。
使用Using filesort的情况:
- 无索引排序
- 多列排序,各列都单独创建索引
# 无索引
explain select id,age,phone from tb_user order by age;
explain select id,age,phone from tb_user order by age, phone;# 多列排序,均为单列索引
explain select id,age,phone from tb_user order by age, phone;
使用Using index的情况:
- 单列排序,有单列索引
- 联合索引正常使用
# 单列索引
explain select age from tb_user order by age;# 联合索引正常使用。给(age、phone)创建联合索引
explain select id,age,phone from tb_user order by age;
explain select id,age,phone from tb_user order by age, phone;
其他情况:
# 给(age、phone)创建联合索引# Using index; Using filesort
explain select id,age,phone from tb_user order by phone;
explain select id,age,phone from tb_user order by phone, age;# Backward index scan; Using index;
explain select id,age,phone from tb_user order by age, phone desc;
联合索引默认是增序的,在MySQL8版本中,可以建立降序索引:
CREATE [UNIQUE | FULLTEXT] INDEX index_name ON table_name(index_col_name asc, index_col_name_2 desc, ...);
group by
在分组操作的时候,通过索引可以提升效率,但是同时也遵循最左匹配原则:
# === 无索引
# Using temporary
explain select profession , count(*) from tb_user group by profession;# === 建立单独索引
# Using index
explain select profession , count(*) from tb_user group by profession;# === 建立联合索引:(profession,age)
# Using index
explain select profession , count(*) from tb_user group by profession;# Using index,Using temporary
explain select age , count(*) from tb_user group by age;
limit
limit查询,查询的数据越往后,时间消耗越大:
# 0.00sec
select * from tb_sku limit 0, 10;# 10.79sec
select * from tb_sku limit 100000, 10;
可以通过:覆盖索引 + 子查询(根据位置分类,属于from后面的子查询;根据返回结果分类,属于列子查询),对SQL进行优化:
explain select * from tb_sku t , (select id from tb_sku order by id limit 2000000,10) a where t.id = a.id;
count
MySQl中统计数量的函数是count()。针对count的优化:
- 方案1:不使用count,自己计数(难搞)
- 方案2:合理的选用count用法。效率:count(字段) < count(主键) < count(1) = count(*)

其余 | 主键优化
- 满足业务的前提下,尽量减低主键的长度
- 插入数据尽量顺主键插入,可以选择自增主键
- 尽量不要用uuid或身份证号作为主键,插入数据不具备排序性质
- 业务操作,避免对主键进行修改
相关文章:
【示例】MySQL-SQL语句优化
前言 本文主要讲述不同SQL语句的优化策略。 SQL | DML语句 insert语句 插入数据的时候,改为批量插入 插入数据的时候,按照主键顺序插入 大批量插入数据的时候(百万),用load指令,从本地文件载入&#x…...
QT 线程的使用
1.头文件: #include<QThread> 2.在.h文件中定义全局: QThread* threadTraj; void threadTrajProcess();//回调函数 3.在.cpp文件中: threadTraj new QThread();//初始化 //连接槽函数 QObject::connect(threadTraj, &QThre…...
Python基于flask的豆瓣电影分析可视化系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【迅为iTOP-4412-linux 系统制作(4)】ADB 或者 TF 卡烧写测试
准备工作 编译生成的内核镜像uImage 和设备树 dtb 文件“exynos4412-itop-elite.dtb”已经可以使用了。 把编译生成的uimage和dtb文件。拷贝fastboot工具。官方的u-boot-iTOP-4412.bin 也拷贝到 platform-tools 文件夹目录内。system.img 也拷贝到 platform-tools 文件夹目录…...
阿里云对象存储OSS批量上传,单个上传,批量删除,单个删除!
请自行替换秘钥: #阿里云 OSS src/main/resources/application.properties #不同的服务器,地址不同 aliyun.oss.file.endpointhttps://oss-cn-hangzhou.aliyuncs.com aliyun.oss.file.accessKeyIdLTAI5t9wUqCoD42qPGRy8S aliyun.oss.file.accessKeySecre…...
Python的国际化和本地化【第162篇—国际化和本地化】
👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展,多语言支持在软件开发中变得越来越重要。Python作为一种流行的…...
播放Samba协议下的音视频文件
Samba(也被称为SMB/CIFS)是一个用于在局域网内共享文件和打印服务的协议,广泛应用于Windows和Linux系统之间的文件共享。 一、展示Samba服务器下的文件 使用如jcifs这样的Java库来在安卓应用中集成SMB/CIFS客户端功能。这个库提供了与SMB/CI…...
Excel全套213集教程
Excel全套213集教程 包含技术入门93集 图表17集 数据透视35集 公式函数68 基础入门 93节 https://www.alipan.com/s/cMxuPstkS1x 提取码: 77dd 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视…...
【七 (1)指标体系建设-构建高效的故障管理指标体系】
目录 文章导航一、故障概述1、故障:2、故障管理: 二、指标体系概述1、指标2、指标体系 三、指标体系构建难点1、管理视角2、业务视角3、技术视角 四、指标体系构建原则1、与战略目标对齐2、综合和平衡3、数据可获得性4、可操作性5、具体和可衡量6、参与和…...
Go gin框架(详细版)
目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go 改动的地方 index.html 改动的地方 style.css 改动…...
Git分布式版本控制系统——Git常用命令(二)
五、Git常用命令————分支操作 同一个仓库可以有多个分支,各个分支相互独立,互不干扰 分支的相关命令,具体如下: git branch 查看分支 git branch [name] 创建分支&#x…...
LeetCode 59.螺旋矩阵II
LeetCode 59.螺旋矩阵II 1、题目 力扣题目链接:59. 螺旋矩阵 II - 力扣(LeetCode) 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1࿱…...
03-JAVA设计模式-适配器模式
适配器模式 设么是适配器模式 它属于结构型模式,主要用于将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中,经常会有这…...
MVVM架构模式
目录 MVVM 数据绑定方式 实现方式 Model View ViewModel 数据绑定方式 vue:: 数据劫持和发布-订阅模式: Object.defineProperty() 方法来劫持(监控)各属性的 getter 、setter ,并在数据(对…...
leetcode2924--找到冠军II
1. 题意 给定一个有向无环图,方向表示胜负关系;求最后胜出的人。 2. 题解 将所有人标记为胜者,统计出度去掉对应胜者标记; 最后统计胜者数目,是否大于1,若大于1,则没有胜者,否则…...
嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记13:RTC实时时钟
系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…...
统一用安卓Studio修改项目包名
可以逃跑,可以哭泣,但不可以放弃 --《鬼灭之刃》 修改项目包名 1)选中项目中药修改的包名: 2)目结构显示方式,取消 Compact Middle Packages 选项; 3)右键要修改的包名,选择 Refactor —— Re…...
Spring Cloud Gateway详细介绍以及实现动态路由
一. 简介 Spring Cloud Gateway This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to …...
transformer上手(6)—— 微调预训练模型
1 加载数据集 以同义句判断任务为例(每次输入两个句子,判断它们是否为同义句),构建我们的第一个 Transformers 模型。我们选择蚂蚁金融语义相似度数据集 AFQMC 作为语料,它提供了官方的数据划分,训练集 / …...
web前端框架设计第四课-条件判断与列表渲染
web前端框架设计第四课-条件判断与列表渲染 一.预习笔记 1.条件判断 1-1:v-if指令:根据表达式的值来判断是否输出DOM元素 1-2:template中使用v-if 1-3:v-else 1-4:v-else-if 1-5:v-show(不支…...
软件测试十年老兵自述:从月薪3K到年薪50W的跃迁密码
一个Bug改变的人生轨迹十年前的那个下午,我还记得格外清晰。作为某外包公司的“点点点”工程师,我机械地对着一个后台管理系统重复着测试用例。月薪3000,坐标二线城市,每天的工作就是执行别人写好的用例,发现Bug就提交…...
FPGA神经形态计算架构与Class 7实现详解
1. FPGA神经形态计算架构概述 神经形态计算是一种模拟生物神经系统信息处理机制的新型计算范式,其核心在于脉冲神经网络(SNiking Neural Network, SNN)的硬件实现。与传统人工神经网络不同,SNN通过精确模拟神经元间的脉冲时序依赖可塑性(STDP)来实现更接…...
WarcraftHelper技术解析:魔兽争霸3兼容性修复实践指南
WarcraftHelper技术解析:魔兽争霸3兼容性修复实践指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper作为一款面向魔兽争霸…...
OBS高级计时器插件:如何高效管理直播时间的完整指南
OBS高级计时器插件:如何高效管理直播时间的完整指南 【免费下载链接】obs-advanced-timer 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-timer OBS高级计时器插件是专为OBS Studio用户设计的专业时间管理工具,通过6种智能计时模式…...
HC32F460_ADC驱动(二)
2 ADC工作的核心要素2.1 采样保持一般来说采样保持电路(S/H)是ADC转换的前端电路。由于模拟信号是时刻连续变化的,若转换过程中输入电压持续波动会导致转换结果失真。采样保持电路的核心作用是在ADC启动转换后保持输入信号不变,保…...
Pearcleaner技术深度解析:macOS应用清理的架构设计与实现原理
Pearcleaner技术深度解析:macOS应用清理的架构设计与实现原理 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner Pearcleaner是一款面向技术开发者和…...
Naftis架构设计原理:从Golang后端到React前端的完整技术栈
Naftis架构设计原理:从Golang后端到React前端的完整技术栈 【免费下载链接】naftis An awesome dashboard for Istio built with love. 项目地址: https://gitcode.com/gh_mirrors/na/naftis Naftis是一款专为Istio服务网格设计的现代化Web仪表板,…...
通达信缠论分析插件:如何用开源工具实现智能技术分析
通达信缠论分析插件:如何用开源工具实现智能技术分析 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 缠论作为技术分析的重要理论体系,其复杂的线段划分和中枢识别让许多交易者望…...
如何免费使用GanttProject:开源项目管理软件的完整入门指南
如何免费使用GanttProject:开源项目管理软件的完整入门指南 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 你是否正在寻找一款功能强大且完全免费的项目管理工具?…...
