mysql性能调优笔记(二)--查询优化和索引

本文详细介绍了MySQL查询的执行流程,包括解析、预处理、优化和执行,强调了响应时间、扫描行数和返回行数作为衡量查询效率的指标。优化策略包括调整查询顺序、避免全列返回等。接着探讨了查询优化器的工作,如静态和动态优化。在索引部分,讲解了B-Tree索引和哈希索引的工作原理,以及如何选择合适的索引策略,如前缀索引、多列索引和避免冗余索引。
摘要由CSDN通过智能技术生成

一、Mysql执行查询流程

                                                                          mysql执行查询的流程

mysql执行查询内部路程:1.客服端发送一条查询给服务器

                                           2.服务器先检查查询缓存,如果命中缓存,立刻返回存储在缓存的结果,否则进入下一阶段。

                                           3.服务器端进行sql解析,预处理,再由优化器生成对应的执行计划。

                                               将一个SQL转换成一个执行计划,MySQL再依照这个执行计划和存储引擎进行交互,者包括多个子阶段,解析SQL,预处理,优化sql执行计划。

                                           4.mysql根据优化器生成的执行计划,调用存储引擎的api来执行查询

                                           5.将结果返回给客户端。

优化数据访问: 1、只查询需要的记录,如使用limit等

                           2、多表关联时不要返回全部列

                           3、查询不取出全部列

                            4、不要重复查询相同的数据:不断重复执行相同的查询,然后每次都返回相同的数据,比较好的方案是,当初次查询的时候将这个数据缓存起来,需要的时候从缓存中取出。

              对于MySQl,最简单的衡量查询开销的三个指标如下:

                             响应时间 

                             扫描的行数

                             返回的行数

语法解析器 : Mysql通过关键字将SQL语句进行解析,并生成一棵对应的“解析树”。MySQL解析器将使用mysql语法规则验证和解析查询。 如:验证是否使用错误的关键字,或者使用关键字的顺序是否正确等。或者它还会验证引号是否能前后正确匹配。

 预处理器 :根据一些MySQL规则进一步检查解析树是否合法。如:检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义。

查询优化器:使用基于成本的优化器,尝试预测一个查询使用某个执行计划的成本,并选择成本最小的一个。

                    使用很多优化策略来生成一个最优的执行计划,优化策略可以简单地分为,一种静态优化,一种动态优化。

静态优化可以直接对解析树进行分析,并完成优化。静态优化不依赖特别的值,如where条件带入的一些常数等。

动态优化则和查询的上下文有关。跟其他因素有关,如WHERE条件中的取值,索引中条目对应的数据行数等。

MySQL能够处理的优化类型:

1、重新定义关联表的顺序

         优化器不总是按查询中指定的顺序。

2、将外连接转化成内连接

         不是所有的outer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值