当前位置: 首页 > 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.dtcms.com/a/335489.html

相关文章:

  • 【Luogu】每日一题——Day21. P3556 [POI 2013] MOR-Tales of seafaring (图论)
  • 中国大学MOOC--C语言程序设计第十周字符串(下)
  • openEuler等Linux系统中如何复制移动硬盘的数据
  • HTTPS 配置与动态 Web 内容部署指南
  • Hadoop入门
  • SpringCloud 06 服务容错 Sentinel
  • NY270NY273美光固态闪存NY277NY287
  • 黎阳之光:以动态感知与 AI 深度赋能,引领电力智慧化转型新革命
  • mysql||事务相关知识
  • nertctl使用了解
  • Node.js导入MongoDB具体操作
  • IoT/HCIP实验-5/基于WIFI的智慧农业实验(LwM2M/CoAP+PSK+ESP8266 连接到 IoTDA)
  • python study notes[4]
  • Vue深入组件:Props 详解3
  • 【adb端口5555】烽火hg680-gy_烽火hg680-gc安卓9线刷烧录包 解决用一段时间就提示升级的问题
  • 回溯剪枝的 “减法艺术”:化解超时危机的 “救命稻草”(一)
  • 如何在 Ubuntu 24.04、22.04 或 20.04 Linux 中更改计算机名称
  • 智能化管理:开启海洋牧场新时代
  • 字节 Golang 大模型应用开发框架 Eino简介
  • Vue深入组件:Props 详解2
  • es7.17.x es服务yellow状态的排查查看节点,分片状态数量
  • 42 C++ STL模板库11-容器4-forward_list
  • C++算法竞赛:位运算
  • 线程(基本概念和相关命令)
  • CT01-反转链表(Java)
  • 从零开始:SpringBoot与KingbaseES的完美融合实践
  • 基于飞算JavaAI的可视化数据分析集成系统项目实践:从需求到落地的全流程解析
  • Java 大视界 -- Java 大数据分布式计算在基因测序数据分析与精准医疗中的应用(400)
  • Excel 表格数据自动填充
  • 【线程安全(二) Java EE】