当前位置: 首页 > news >正文

10 SQL进阶-SQL优化(8.15)

一、插入数据

1、批量插入

建议500-1000条,超过1000建议分割处理。

2、手动提交事务

3、主键顺序插入

4、大批量插入数据-load

如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行操作。

主键顺序插入性能高于乱序插入。

二、主键优化

1、数据组织方式

看最后一行id大小,由小到大。

叶子结点和索引都存在page中。

2、页分裂

(1)顺序插入

(2)乱序插入

图中为已经插入好的数据,现在要插入id=50的数据。叶子结点是有序的,但一号page写不下,找到第一个数据页50%的地方,先将23和47移动到新数据页,再后面放入50。

对链表指针重新设置。

3、页合并

删除13 14 15 16:,达到50%,将2和3自行合并。

最后效果:

默认为50%,可以修改。

4、主键设计原则

三、order by 优化

1、排序方式

(1)using filesort

通过表的索引或者全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫filesort排序。

因为age和phone没有索引,所以全表扫描。

(2)using index

通过有序索引顺序扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高。

前提:覆盖索引

创建索引后,再次排序,即为using index。

(3)backward index scan

backward index scan:反向扫描索引

Btree里是升序排序,要反向扫描一下。

(4)其他

索引顺序为phone、age,这里反了过来,违背最左前缀法则。

创建索引时,默认升序,age为用到索引,phone全表扫描。

这里的collation中的A为asc。

优化一下。

先按照年龄升序排序,年龄相同再按照phone升序排序。

先按照年龄升序排序,年龄相同再按照phone降序排序。

2、总结

(最后一条)

show variables like 'sort_buffer_size';

四、group by优化

1、案例

全表扫描,没有用到索引。using temporary 用到临时表,性能较低。

建立索引:

用age分组,有using temporary,性能较差。因为没有满足最左前缀法则。

此时满足最左前缀法则。使用了索引。

利用where条件筛选profession,再用age分组,此时也是用了索引,想Btree结构。

2、总结

(1)在分组操作时,可以通过索引来提高效率。

(2)分组操作时,索引的使用也是满足最左前缀法则的。

五、limit优化

两者时间不同,越往后越大。

优化前:

优化后:

把查询到的id看做新表

六、count优化

1、优化思路

2、count的几种用法

3、性能分析

七、update优化

客户端一:

此时会把id=1给锁住。

客户端二:

此时会把id=4锁住。

相互不影响,可以提交。

若是update course set name = 'SpringBoot' where name = 'PHP';

此时为表锁,另一事务将不能执行update操作。当事务中update被执行,表锁被释放可以成功。

当对name字段建立索引,此时再执行前面的操作,为行锁。

http://www.lryc.cn/news/623718.html

相关文章:

  • Matlab课程实践——基于MATLAB设计的计算器软件(简单、科学、电工、矩阵及贷款计算)
  • esp32(自定义分区)coredump
  • C语言私人学习笔记分享
  • 关于第一次接触Linux TCP/IP网络相关项目
  • 使用Ansys Fluent进行倒装芯片封装Theta-JA热阻表征
  • 计算机网络 OSI 七层模型和 TCP 五层模型
  • IP 分片和组装的具体过程
  • 数字货币的法律属性与监管完善路径探析
  • Trae 辅助下的 uni-app 跨端小程序工程化开发实践分享
  • 【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
  • 【昇腾】单张48G Atlas 300I Duo推理卡MindIE+WebUI方式跑14B大语言模型_20250817
  • 前端vue3+后端spring boot导出数据
  • Java 大视界 -- Java 大数据分布式计算在基因测序数据分析与精准医疗中的应用(400)
  • Linux | i.MX6ULL网络通信-套字节 UDP(第十八章)
  • 计算机网络 TCP 延迟确认机制
  • 矿物分类案列 (一)六种方法对数据的填充
  • 安卓开发者自学鸿蒙开发2页面高级技巧
  • 安卓14系统应用收不到开机广播
  • Android原生(Kotlin)与Flutter混合开发 - 设备控制与状态同步解决方案
  • Javascript面试题及详细答案150道之(106-120)
  • Python实现区域生长和RANSAC聚类
  • 职场新人如何在快速适应工作的同时保持自我成长节奏?
  • JUC常用线程辅助类详解
  • JavaScript 性能优化实战大纲
  • [GLM-4.5] LLM推理服务器(SGLang/vLLM) | 工具与推理解析器
  • c_str()函数的详细解析
  • 【PHP】Hyperf:接入 Nacos
  • Python | 解决 matplotlib 中文乱码
  • 基于MATLAB多智能体强化学习的出租车资源配置优化系统设计与实现
  • [论文阅读] 人工智能 + 职业教育 | 从技能操作者到技术反思者:生成式AI驱动职业教育学习范式转型