- 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
- 当A表的数据集系小于表的数据集时,用exists优于in。
- 注意: 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来替代,何种最优需要具体问题具体分析

本文提供了一套完整的慢SQL优化流程,包括慢查询日志的开启与捕获、使用explain分析SQL执行计划、利用show profile查看SQL执行细节,以及数据库参数调优策略。强调了小表驱动大表的优化原则,并对比了IN与EXISTS的使用场景。
466

被折叠的 条评论
为什么被折叠?



