mysql优化原理_万字干货总结:MySQL优化原理学习,这一篇就够了!

4. 萌芽优化

经由前面的步调生成的语法树被认为是合法的了,并且由优化器将其转化成萌芽筹划。多半情况下,一条萌芽可以有很多种履行方法,最后都返回响应的结不雅。优化器的感化就是找到这个中最好的履行筹划。

MySQL 应用基于成本的优化器,它测验测验猜测一?萌芽应用某种履行筹划时的成本,并选择个侄旧本最小的一个。在 MySQL 可以经由过程萌芽当前会话的 last_query_cost 的值来获得其计算当前萌芽的成本。mysql> select * from t_message limit 10;

...省略结不雅集

mysql> show status like 'last_query_cost';

+-----------------+-------------+

| Variable_name   | Value       |

+-----------------+-------------+

| Last_query_cost | 6391.799000 |

+-----------------+-------------+

示例中的结不雅表示优化器认为大年夜概须要做 6391 个数据页的随机查找才能完成膳绫擎的萌芽。这个结不雅是根据一些列的统计信息计算得来的,这些统计信息包含:每张表或者索引的页面个数、索引的基数、索引和数据行的长度、索引的分布情况等等。select count(distinct staff_id)/count(*) as staff_id_selectivity,

count(distinct customer_id)/count(*) as customer_id_selectivity,

count(*) from payment

有异常多的原因会导致 MySQL 选择缺点的履行筹划,比如统计信息不精确、不会推敲不受颇┞菲握的操作成本(用户自定义函数、存储过程)、MySQL 认为的最优跟我们想的不一样(我们欲望履行时光尽可能短,但 MySQL 值选择它认为成本小的,但成本小并不料味下落行时光短)等等。

MySQL 的萌芽优化器是一个异常复杂的部件,它应用了异常多的优化策略来生成一个最优的履行筹划:从新定义表的接洽关系次序若干好多张表接洽关系萌芽时,并不必定按照 SQL 中指定的次序进行,但有一些技能可以指定接洽关系次序)

优化 MIN() 和 MAX() 函数(找某列的最小值,如不雅该列有索引,只须要查找 B+Tree 索引最左端,反之则可以找到最大年夜值,具体道理见下文)

提前终止萌芽(比如:应用 Limit 时,查找到知够数量的结不雅集后会急速终止萌芽)

优化排序(在老版本 MySQL 会应用两次传输排序,即先攫取行指针和须要排序的字段在内存中对其排序,然后再根据排序结不雅去攫取数据行,而新版本采取的是单次传输排序,也就是一次攫取所有的数据行,然后根据给定的列排序。对于 I/O 密集型应用,效力会高很多)

跟着 MySQL 的赓续成长,优化器应用的优化策略也在赓续的进化,这里仅仅介绍几个非经常用且轻易懂得的优化策略,其他的优化策略,大年夜家自行查阅吧。

5. 萌芽履行引擎

在完成解析和优化阶段今后,MySQL 会生查对应的履行筹划,萌芽履行引擎根据履行筹划给出的指令慢慢履行得出结不雅。全部履行过程的大年夜部分操作均是经由过程调用存储引擎实现的接口来完成,这些接口被称为 handler API。萌芽过程中的每一张表由一个 handler 实例表示。实际上,MySQL 在萌芽优化阶段就为每一张表创建了一个 handler 实例,优化器可以根据这些实例的接口来获取表的相干信息,包含表的所有列名、索引统计信息等。存储引擎接口供给了异常丰富的功能,但其底层仅有几十个接口,这些接口像搭积木一样完成了一次萌芽的大年夜部分操作。

4. 避免多个范围前提

6. 返回结不雅给客户端

2. 优化接洽关系萌芽

萌芽履行的最后一个阶段就是将结不雅返回给客户端。即使萌芽不到数据,MySQL 仍然会返回这个萌芽的相干信息,比如该萌芽影响到的行数以及履行时光等。

如不雅萌芽缓存被打开且这个萌芽可以被缓存,MySQL 也会将结不雅存放到缓存中。

结不雅集返回客户端是一个增量且慢慢返回的过程。有可能 MySQL 在生成第一条结不雅时,就开端向客户端慢慢返回结不雅集了。如许办事端就无须存储太多结不雅而消费过多内存,也可以让客户端第一时光获得返回结不雅。须要留意的是,结不雅集中的每一行都邑以一个知足①中所描述的通信协定的数据包发送,再经由过程 TCP 协定进行传输,在传输过程中,可能对 MySQL 的数据包进行缓存然后批量发送。

回头总结一下 MySQL 全部萌芽履行过程,总的来说分为 6 个步调:客户端向 MySQL 办事器发送一条萌芽请求

办事器起首检查萌芽缓存,如不雅射中缓存,则急速返回存储在缓存中的结不雅。不然进入下一阶段

推荐阅读

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散

Hadoop的搭建有三种方法,单机版合适开辟调试;伪分布式版,合适模仿集群进修;完全分布式,临盆应用的模式。这篇文件介绍若何搭建完>>>详细阅读

地址:http://www.17bianji.com/lsqh/39574.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值