决战圣地玛丽乔亚Day23---MYSQL性能优化02

Mysql的执行流程:

 

 

 解析和预处理验证语法是否合理合法。然后由优化器转换成执行计划。一条查询很多种执行计划都可以返回相同的结果,优化器需要选择一条最优的解。

Mysql使用基于成本的优化器,预测执行计划的成本并选择最优。 可以使用last_query_cost来看当前会话的成本。 数值为优化器认为需要多少次随机IO才能找到数据。不考虑缓存,认为每次数据读取都是一次IO

优化器会进行静态优化和动态优化,动态优化在每次查询都会执行。  静态优化直接对解析树优化,通过一些简单的代数替换等等。动态优化要考虑的因素就有很多

优化器的优化也不是每次都是准确的优化,也有负面优化。

优化器的优化包括:

1.重新定义关联表的顺序(外连接转内连接)

2.对表达式进行等价代换

3.优化Count(),max(),min():

通过索引和列可以优化,索引的左右端就是最大值最小值,执行计划可以移出表用常量值代替。

count(*)在MyIsam中也可以利用MyIsam存储行号的特性来优化。

4.预估并转化为常数表达式

表达式可以转换为常数

用到索引列执行计算操作,可以快速定位到值,看做一个常数

5.覆盖索引扫描(覆盖索引可以直接根据索引返回)

6.子查询优化

7.提前终止查询(limit)

8.等值传播(where条件作用于多个关联在一起的表)

9.列表IN的比较

MySQL将IN()列表中的数据先进行排序,然后通过二分查找的方式来确定列表中的值是否满足条件,这是一个O(log n)复杂度的操作,等价地转换成OR查询的复杂度为O(n),对于IN()列表中有大量取值的时候,MySQL的处理速度将会更快

 

对于关联查询的执行:

Mysql认为每次查询都是一次关联,关联嵌套的方式进行关联。

MYSQL先在一个表中循环取出单挑数据,然后嵌套循环到一下个表寻找匹配行

 这段代码的执行过程是先通过外部循环迭代器遍历满足条件的 tbl1 行,然后在内部循环中,遍历满足条件的 tbl2 行,最后将两个表格中的列进行输出。这种嵌套循环的方式通常用于实现关联查询等场景。

 

 

执行计划

关联查询优化器

排序优化 

posted @   NobodyHero  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示