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

join性能问题,distinct和group by性能,备库自增主键问题

前言

读书笔记 做一下小总结


join性能问题,distinct和group by性能,备库自增主键问题

  • 前言
  • left join的判断条件都在on里面和部分在where里面有什么区别吗?
  • left join的左边一定会是驱动表吗?
  • BNL和SNL算法都需要轮询N*M次,为什么BNL快?
  • distinct和group的性能区别:
  • 备库自增主键问题:

left join的判断条件都在on里面和部分在where里面有什么区别吗?

当在where里面时,那就在结果中就会过滤掉没有匹配到的值。

如果是都在on里面的话那么即使没有匹配到,左边驱动表也会展示然后后面没有匹配到的字段显示为null。

这里有一个知识点就是在mysql中任何值和null做判断无论是否符合结果都是null,即便是null = null 的结果也是null。因此在where中做判断时,如果出现了null的判断就直接返回了null导致不会有这条数据。这就是为什么where判断之后,不满足的数据会直接不展示的原因。

left join的左边一定会是驱动表吗?

在添加了where语句之后,优化器会去分析,如果和join的效果一样,那么就会把left join变成 join。

join就不在有驱动表和被驱动表。

BNL和SNL算法都需要轮询N*M次,为什么BNL快?

这里可以再复习一下关于left join 的两种执行算法流程:BNL和Simple Nested Loop join(SNL)

BNL的执行流程,首先会把驱动表的数据全部放到join- buffer中(如果放不下就分批次),然后获取被驱动表中的数据遍历和join- buffer中对比。

对于Simple Nested Loop join的执行流程是获取驱动表中的一行数据,然后到被驱动表做全表扫描。被驱动表的数据放到buffer-pool中,可能会导致buffer-pool中的热点数据失效,因为join需要多次轮询,所以即便是3/8的方式也容易导致3中也被替换掉。
同时需要大量的从磁盘查询,所以会导致SNL查询效率很慢这个问题。

distinct和group的性能区别:

对于大多使用group by的场景 其实涉及到再where a count(*) 来计算一行出现了多少次。所以会慢一些。

但是如果没有这一步的各种统计计算的话。那么他们两个的执行流程是一样的:

通过创建一个临时表,然后在排序的字段上添加唯一索引,然后把数据放到临时表里,有冲突跳过,没有写入。所以性能也是一样的。

备库自增主键问题:

这个问题是,如果binlog的格式是statement,那么自增主键的获取和提交到binlog的顺序可能会不一致,为什么备库上没有出现id的顺序混乱?

因为在binlog中有一个set insert_ID 的值会根据主库上申请的顺序先申请的设置成1

后申请但是先提交了就设置成2。也就是写入的时候会在原来的基础上+2

那么即使提交的顺序不一样,也会保持一致。

http://www.dtcms.com/a/265738.html

相关文章:

  • 微信小程序在用户拒绝授权后无法使用wx.opensetting再次获取定位授权
  • 针孔相机模型
  • python学习打卡day59
  • 【轨物洞见】光伏机器人与组件、支架智能化协同白皮书
  • Linux操作系统之文件(二):重定向
  • Android 系统默认的Launcher3,Android 系统的导航栏(通常是屏幕底部)显示的 4 个快捷应用图标,如何替换这4个应用图标为客户想要的。
  • Fiddler中文版抓包工具在后端API调试与Mock中的巧用
  • Treap树
  • thinkphp8接管异常处理类
  • linux系统 weblogic10.3.6(jar) 下载及安装
  • 后端 Maven打包 JAR 文件、前端打包dist文件、通过后端服务访问前端页面、Nginx安装与部署
  • Josn模块的使用
  • MVC 架构设计模式
  • Docker 安装 Redis 哨兵模式
  • 【数据结构】C++的unordered_map/set模拟实现(开散列(哈希桶)作底层)
  • 机器人“触摸”水果成熟度突破:SwishFormer模型与DIGIT视触觉传感器在HelloRobot上的水果检测应用
  • TDSQL如何查出某一列中的逗号数量
  • 从 TCP/IP 协议栈角度深入分析网络文件系统 (NFS)
  • (1)手摸手-学习 Vue3 之 Vite 创建项目
  • grpc 和限流Sentinel
  • STC8G 8051内核单片机开发(GPIO)
  • 2025年6月微短剧备案分析:都市题材占四成,20-29集成主流体量
  • OS15.【Linux】gdb调试器的简单使用
  • 修改文件属主
  • 活体检测api集成方案-炫彩活体检测助力身份核验
  • 马斯克脑机接口(Neuralink)技术进展,已经实现瘫痪患者通过BCI控制电脑、玩视频游戏、学习编程,未来盲人也能恢复视力了
  • [极客时间]LangChain 实战课 -----|(10) 链(下):想学“育花”还是“插花”?用RouterChain确定客户意图
  • 预警:病毒 “黑吃黑”,GitHub 开源远控项目暗藏后门
  • 2024年INS SCI2区,强化搜索自适应大邻域搜索算法RSALNS+无人机扩展型协作多任务分配,深度解析+性能实测
  • 实现如何利用 Kafka 延时删除 用户邮箱的验证码(如何发送邮箱+源码) - 第一期