`

MySQL查询优化

阅读更多

一、查询为什么慢

网络,CPU计算,生成的统计信息,执行技术,锁等待,IO等待等。

二、慢查询优化访问

低效查询的处理办法:

  1. 确认是否访问了太多行,或者太多列
  2. 是否分析了大量的数据

问题及应对办法

  1. 查询不需要的记录:使用Limit
  2. 避免select *,会影响索引覆盖扫描
  3. 避免重复查询相同的数据

WHERE语句的三种使用方式

  1. 存储引擎直接使用WHERE过滤无效字段
  2. 使用索引扫描,在索引中过滤无效字段(Extra出现Using Index)
  3. 返回所有数据然后WHERE过滤(Extra中出现Using Where)

查询大量数据返回少量行是可以考虑的技巧

  1. 使用覆盖索引
  2. 修改库表结构例如增加汇总表
  3. 重写复杂查询

三、重构查询方式

考虑使用一个复杂查询还是多个简单查询


切分查询

  1. 将服务器的压力分散到一个时间段

分解关联查询

  1. 让缓存的效率更高
  2. 执行单个查询可以减少所得争用问题
  3. 更易拆分数据表,更容易做到高性能和可扩展
  4. 可能让MySQL按照ID进行顺序查询,而不是随机关联
  5. 可以减少冗余数据的查询
  6. 相当于在应用中实现了HASH关联,而不是使用MySQL的嵌套循环关联

四、查询执行基础

查询执行流程

  1. 服务器接收一条查询命令
  2. 如果有查询缓存直接返回结果,否则进入下一阶段
  3. SQL解析,预处理
  4. 优化器生成对应的执行计划
  5. 根据执行计划调用存储引擎API,完成查询
  6. 将结果返回

查询缓存

  使用大小写敏感的hash查找实现,只要查询语句有一点改变,就不会被命中。再此期间还会确认一遍用户的权限。这时候查询语句并未被解析,所以也就解释好了where a>2执行完之后where a>1+1不会被缓存命中的原因。


MySQL执行关联策略

MySQL对任何关联都执行嵌套关联操作。

  • MySQL先在一个表中循环取出单条数据
  • 然后再嵌套循环到下一个表中寻找匹配的行
  • 依次下去直到找到所有表中匹配的行为止
  • 然后根据根据各个表匹配的行,返回查询中需要的列
  • MySQL会根据相应的优化策略优化关联的顺序,使遍历多表达到较好的效果

查看重构查询

对该查询执行

explain select * from t1;

之后执行

show warning;

排序优化

  1. 旧:读取行指针和需要排序的字段,对其 进行排序,然后在根据排序结果读取所需要的行
  2. 新:先读取查询所需要的所有的列,然后再根据给定列进行排序,最后直接返回排序结果
  3. 比较:

    • 优点:只需要一次顺序IO,比起两次IO(其中还有一次随机IO)有了很大优势
    • 缺点:引入很多无用的列,白白占用着内存,对排序无影响
  4. 文件排序:

    • 对每一个排序记录都会分配一个足够长的定长空间来存放,有时排序占用的空间比数据存储占用的空间还要多
    • 对于关联查询来数order by子句中所有的列都来自于第一个表,那么MySQL在关联第一张表的时候就进行文件排序(Extra中可看到Using Filesort)
    • 否则会先将关联的结果放到临时表中,然后在所有表都关联完成后再进行文件排序,5.6版本之后可以将Limit提前执行,避免了排序大量的数据到最后只需要很少的尴尬处境
1
3
分享到:
评论

相关推荐

    MySQL查询优化浅析

    ### MySQL查询优化浅析 #### 重要概念:查询优化 查询优化是数据库管理系统(DBMS)中的关键组件之一,其核心目标在于寻找最有效的查询执行计划,以最小化资源消耗(如CPU时间、I/O操作)并加快数据检索速度。在...

    MySQL查询优化技术_索引.pdf

    MySQL查询优化技术_索引

    MySQL查询优化器的工作原理

    3. 进行基于规则的优化,这是一系列预定义的转换操作,用来优化查询语句。 4. 开展基于成本的优化,也称为统计式优化,这是最复杂且最有决定性的一步。优化器会考虑多种可能的执行计划,并为每个计划计算一个成本...

    mysql查询优化之索引优化

    - **避免全表扫描**:通过优化查询语句,减少不必要的全表扫描,例如,避免在WHERE子句中使用NOT IN、!=、等操作符。 - **监控和分析**:定期检查EXPLAIN计划,分析索引的使用情况,使用MySQL的性能分析工具如pt-...

    MySQL查询优化实践.pdf

    查询优化可以通过优化索引、优化查询语句和优化数据库结构来实现。OLTP 和 OLAP 是两种不同的查询优化方法,OLTP 适用于在线事务处理,而 OLAP 适用于在线分析处理。 OLTP 和 OLAP OLTP 和 OLAP 是两种不同的查询...

    MySQL查询优化技术讲座.pdf

    ### MySQL查询优化技术详解 #### 引言:MySQL查询优化的重要性 在当今互联网时代,网站的速度直接影响用户体验和业务效果。数据库查询效率成为决定网站响应速度的关键因素之一。MySQL作为广泛使用的开源关系型...

    MySQL查询优化系列讲座.rar

    接着,"MySQL查询优化系列讲座之数据类型与效率"强调了正确选择数据类型对于优化查询的重要性。不同数据类型占用的空间、存储效率以及参与计算的方式都不同,选择合适的数据类型可以减少存储需求,提高查询速度。这...

    Mysql查询优化器.rar

    MySQL查询优化器是数据库管理系统中的核心组件,负责解析SQL语句并制定出执行查询的最佳计划。这个过程涉及多个阶段,包括解析、预处理、优化和执行。本资料“Mysql查询优化器.rar”包含了对这一关键主题的深入探讨...

    MySQL查询优化.rar

    4. **减少临时表的使用**:尽量避免在复杂的查询中创建临时表,可以通过优化查询结构或者使用内存临时表来改善性能。 5. **合理使用GROUP BY和ORDER BY**:这两个操作可能导致排序,消耗大量资源。如果可能,应先...

    mysql查询优化的若干

    ### MySQL 查询优化的关键知识点 #### 1. 理解MySQL如何优化LEFT JOIN 在MySQL中,`A LEFT JOIN B` 的实现主要包括以下几个步骤: - **表B依赖于表A**:这意味着表B的处理顺序依赖于表A的存在,确保在处理B之前,A...

    MySQL数据库技术分享 MySQL查询优化浅析 共32页.pdf

    MySQL查询优化是数据库管理中至关重要的一个环节,其目的是通过找到执行SQL语句的最佳路径,以提高查询效率,减少资源消耗。在这个过程中,查询优化器起着核心作用,它会根据代价模型来评估不同的执行计划,并选择...

    MySQl 查询优化

    其次,优化查询语句结构是另一个关键环节。避免在WHERE子句中使用不等式或复杂的表达式,这可能导致无法利用索引。尽量使用JOIN操作替代子查询,因为JOIN的执行计划可能更高效。同时,避免使用SELECT *,明确指定...

    MySQL查询优化实践-最终版.pdf

    在执行查询时,MySQL优化器会根据统计信息和查询条件选择最佳的索引。 对于复杂查询优化,比如涉及多个表连接的查询,应考虑使用连接顺序、索引覆盖和子查询优化等策略。连接顺序对查询性能影响很大,MySQL会选择...

    MySQL查询优化技术讲座[收集].pdf

    7. **查询优化技巧**:除了索引,还可以通过其他方式优化查询,比如减少子查询、避免在WHERE子句中使用函数、使用EXPLAIN分析查询计划等。理解数据库查询执行的逻辑可以帮助找出性能瓶颈。 8. **存储引擎的选择**:...

    Mysql查询优化

    Mysql查询优化,查询优化器,子查询,分页查询1)在执行计划1中,哪张表是驱动表? 表的连接顺序是怎样的?每一步表的扫描类型是什么? 2)在执行计划2中,表的执行顺序是怎样的?每一步表的扫描类型是什么? 3)在...

Global site tag (gtag.js) - Google Analytics