mysql学习笔记-小表驱动大表与exists和in的区别

本文提供了一套完整的慢SQL优化流程,包括慢查询日志的开启与捕获、使用explain分析SQL执行计划、利用show profile查看SQL执行细节,以及数据库参数调优策略。强调了小表驱动大表的优化原则,并对比了IN与EXISTS的使用场景。
  • 1观察,至少跑1天,看看生产的慢SQL情况。
  • 2开启慢查询日志,设置阙值,比如超过5秒钟的就是慢SQL, 并将它抓取出来
  • 3 explain+慢SQL分析
  • 4 show profile .
  • 5运维经理orDBA,进行SQL数据库服务器的参数调优。

总结


  • 0
  • 1慢查询的开启并捕获
  • 2 explain+慢SQL分析
  • 3 show
  • profile查询SQL在Mysq1服务器里面的执行细节和生命周期情况
  • 4 SQL数据库服务器的参数调优。.

永远小表驱动大表

优化原则:小表驱动大表,即小的数据集驱动大的数据集。

###...##原理(RBO) ##.####...# # ####
select审from A where id in (select id from
# 等价于:
for select id from B
for select * from A where A.id - B.id

当表的数据集必须小于A表的数据集时,用in优于exists.

select * from A where exists (select 1 from B where B.1d = A.1d)
# 等价于
for select . from A
  1. 当A表的数据集系小于表的数据集时,用exists优于in。
  2. 注意: A表与表的ID字段应建立索引。

  • EXISTS
  • SELECT -. FROM table WHERE EXISTS (subquery)
  • 该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或FALSE)来决定主查询的数据结果是否得以保留。
  • 1 EXISTS (subquery)只返回TRUE或FALSE,因此子查询中的SELECT *也可以是SELECT 1或select’X,官方说法是实际执行时会忽略SELECT清单,因此没有
  • 区别
  • 2 EXISTS子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。
  • 3 EXISTS子查询往往也可以用条件表达式、其他子查询或者JOIN来替代,何种最优需要具体问题具体分析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值