目录

二、SQL优化原则与方法原则

三、SQL执行顺序:

四、order by查询的两种情况:

等价改写、反嵌套

SELECT优化-limit

事务的使用与优化


一、✓减少磁盘IO

全表扫描
磁盘临时表
日志、数据块fsync
✓ 减少网络带宽
返回太多数据
交互次数过多
✓ 降低CPU消耗
排序分组。order by, group by
聚合函数。max,min,sum...
逻辑读

二、SQL优化原则与方法原则

⚫ 减少访问量: 数据存取是数据库系统最核心功能,所以IO是数据库系统中最容易出现性能瓶颈,减少SQL访
问IO量是SQL优化的第一步;数据块的逻辑读也是产生CPU开销的因素之一。
• 减少访问量的方法:创建合适的索引、减少不必访问的列、使用索引覆盖、语句改写。
⚫ 减少计算操作 :计算操作进行优化也是SQL优化的重要方向。SQL中排序、分组、多表连接操作等计算操作
都是CPU消耗的大户。
• 减少SQL计算操作的方法:排序列加入索引、适当的列冗余、SQL拆分、计算功能拆分。
方法 • 创建索引减少扫描量
• 调整索引减少计算量
• 索引覆盖(减少不必访问的列,避免回表查询)
• SQL改写
• 干预执行计划

三、SQL执行顺序:

(8) SELECT (9) DISTINCT <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <limit_number>

四、order by查询的两种情况:

• Using index。MySQL直接通过索引返回有序记录,不需要额外的排序操作,操作效率较高
• Using filesort。无法只通过索引获取有序结果集,需要额外的排序,某些特殊情况下,会出现
Using temporary
优化目标:尽量通过索引来避免额外的排序,减少CPU资源的消耗
✓ where条件和order by使用相同的索引
✓ order by的顺序和索引顺序相同
✓ order by 的字段同为升序或降序

Version:0.9 StartHTML:0000000105 EndHTML:0000000809 StartFragment:0000000141 EndFragment:0000000769

注:当where条件中的过滤字段为覆盖索引的前缀列,而order by字段是第二个索引列时,只有
where条件是const匹配时,才可以通过索引消除排序,而between...and或>?、<?这种range匹配
都无法避免filesort操作
Version:0.9 StartHTML:0000000105 EndHTML:0000003048 StartFragment:0000000141 EndFragment:0000003008

当无法避免filesort操作时,优化思路就是让filesort的操作更快
排序算法:
• 两次扫描算法。两次访问数据,第一步获取排序字段的行指针信息,在内存中排序,第二步根据
行指针获取记录
• 一次扫描算法。一次性取出满足条件的所有记录,在排序区中排序后输出结果集。是采用空间换
时间的方式
注:需要排序的字段总长度越小,越趋向于第二种扫描算法,MySQL通过
max_length_for_sort_data参数的值来进行参考选择
优化策略:
1、适当调大max_length_for_sort_data这个参数的值,让优化器更倾向于选择第二种扫描算法
2、只使用必要的字段,不要使用select *的写法
3、适当加大sort_buffer_size这个参数的值,避免磁盘排序的出现( 线程参数,不要设置过大 )
➢ 子查询会用到临时表,需尽量避免
➢ 可以使用效率更高的join查询来替代
优化策略:

等价改写、反嵌套

如下SQL:
select * from customer where customer_id not in (select customer_id from payment)
改写形式:
select * from customer a left join payment b on a.customer_id=b.customer_id where b.customer_id is null

SELECT优化-limit

➢ 分页查询,就是将过多的结果在有限的界面上分好多页来显示。
➢ 其实质是每次查询只返回有限行,翻页一次执行一次。
优化目标:
1、消除排序
2、避免扫描到大量不需要的记录
SQL场景(film_id为主键):
select film_id,description from film order by title limit 10000,20
此时MySQL排序出前10020条记录后仅仅需要返回第10001到10020条记录,前
10000条记录造成额外的代价消耗
select * from sbtest1 where id > #max_id# order by id limit n;
• 适用顺序翻页的场景,每次记录上一页#max_id#带入下一次查询中
select * from sbtest1 as a inner join ( select id from sbtest1 order by id limit m, n ) as b
on a.id = b.id order by a.id;
• 适用只按照id进行分页,无where条件
select * from sbtest1 as a
inner join ( select id from sbtest1where col=xxxx order by id limit m, n ) as b
on a.id = b.id order by a.id;
• 适用于带where条件,同时按照id顺序分页
• 此时,需要在where条件上创建二级索引

事务的使用与优化

大事务

1.大事务拆分为小事务
2.DDL拆分(无锁变更)
长事务
1.合并为大事务(特别是写入场景)
2.事务分解 (不必要的请求摘除)

mysql学习ppt摘抄笔记相关推荐

  1. MySQL学习【个人笔记/已完结】

    学校课程数据库大概都学过啦,不过已经过去两年了,就跟着狂神老师复习复习吧.个人向的笔记,就记录一些重难点与自己不会的知识点,不会特别详细滴~ 一.软件安装与初识 1.1 MySQL 安装目录下建一个 ...

  2. mysql心得笔记_【原创】学习{我的mysql学习心得}的笔记

    标签: 万丈高楼平地起. 从最基础的做起,从最简单的做起. ---------------------------------------------------------------------- ...

  3. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

  4. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作 #创建 #数据库的创建 USE mysql; CREATE DATABASE db_x; #删除 #删除数据库 DROP DA ...

  5. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  6. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. MySQL学习笔记05【多表操作、三大范式、数据库的备份和还原】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  9. MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

最新文章

  1. 第五轮学科评估再提“破五唯”
  2. 看看那些令人惊艳的入库方案
  3. 在UltraWebGrid单元格中绑定dropdownlist
  4. Win10 UAP 绑定
  5. 简单而不平凡的杨辉三角
  6. iOS设备中的推送(三):页面跳转
  7. Django实战(一)——教育网站
  8. JMeter之压力测试
  9. windows cmd批处理终端 快速编辑模式
  10. win10用什么清理垃圾好?
  11. 信签纸有虚线怎么写_信签纸写作文格式怎么用
  12. STM32F303RE 四个ADC同步规则采样
  13. 学渣的刷题之旅 leetcode刷题 7.整数反转
  14. Java 获取当前年 、当前月
  15. 80c51单片机指令大全
  16. 2020.4.15华为实习招聘笔试题第三题
  17. 1的平方加2的平方一直加到n的平方
  18. 美股 基础知识2-常见问答
  19. Linux socket下read函数详解
  20. 计算机技术职称自我评价,网络工程师的自我评价

热门文章

  1. 利用simhash来进行文本去重复
  2. 虚拟直播需要哪些设备?如何搭建虚拟直播团队?
  3. 中国移动号码手机开机以及注册gprs流程
  4. util.Date和sql.Date之间的转换
  5. MySQL——读写分离 理论+实操!!!
  6. 手机没Root?你照样可以渗透路由器
  7. kali安装flash插件
  8. [Java大厂必备面试题] 点滴促就辉煌, 每日三题【Day14】: 数据库8
  9. 条码枪扫码时,只能在文本框录入一位字符的问题
  10. 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务