0
点赞
收藏
分享

微信扫一扫

Mysql物理查询技术


Mysql物理查询技术_嵌套循环

     逻辑查询优化主要基于代数理论与启发式规则。

 

Mysql物理查询技术_嵌套循环_02

   (1):是全盘扫描最优,还是基于索引的扫描最优;对于单表扫描,主要还是看磁盘IO;

   (2):不同表的连接方式,有不同的消耗;块嵌套循环连接算法,基于Hash的连接,排序归并连接;

   (3):考虑哪一种连接的花费是最少的;

   

Mysql物理查询技术_嵌套循环_03

Mysql物理查询技术_读取数据_04

       图:物理查询优化技术

Mysql物理查询技术_读取数据_05

  

Mysql物理查询技术_mysql_06

Mysql物理查询技术_mysql_07

 如果选择率低于10%,那么使用索引扫描效率很高,如果选择率比10%大很多,那么使用索引扫描的效率可能不高。

Mysql物理查询技术_嵌套循环_08

(3):我们要查询的数据信息在索引树上可以找到,那么直接利用索引就可以了,不需要读取数据文件;

Mysql物理查询技术_嵌套循环_09

Mysql物理查询技术_嵌套循环_10

Mysql物理查询技术_读取数据_11

Mysql物理查询技术_嵌套循环_12

Mysql物理查询技术_mysql_13

块嵌套循环连接算法减少了r2的读入次数。

Mysql物理查询技术_读取数据_14

Mysql物理查询技术_mysql_15

Mysql物理查询技术_嵌套循环_16

Mysql物理查询技术_mysql_17

Mysql物理查询技术_读取数据_18

Hash连接只适用于等值计算,不适用于不等式的比较,不能利用Hash连接进行分组或者排序的优化,因为Hash索引是无需的。

Mysql物理查询技术_嵌套循环_19

Mysql物理查询技术_读取数据_20

Mysql物理查询技术_mysql_21

Mysql物理查询技术_mysql_22

Mysql物理查询技术_mysql_23

Memory代价:内存拷贝代价;

Remote代价:远程代价;

Mysql物理查询技术_嵌套循环_24

Mysql物理查询技术_读取数据_25

          type:ALL表示全表扫描;

Mysql物理查询技术_读取数据_26


Mysql物理查询技术_读取数据_27

UsingIndex:表示使用了只读索引,表示只使用索引,而不使用数据文件来读取数据;


Mysql物理查询技术_mysql_28


Using join buffer:使用了连接缓存;

BlockNestedLoop:块嵌套循环连接算法;


Mysql物理查询技术_读取数据_29

两表的普通列做等值连接;


Mysql物理查询技术_嵌套循环_30

tt1表的主键列和tt2表的普通列做等值连接;


Mysql物理查询技术_mysql_31


BKA即Batch Key Access:批量关键字访问或者依照索引对批量关键字访问;


Mysql物理查询技术_读取数据_32

SET optimizer_switch="mrr=on, mrr_cost_based=off, batched_key_access=on";

mrr=on:多范围扫描;

mrr_cost_based=off:把基于mrr的估算关掉;

batched_key_access=on; 打开bka算法;


Mysql物理查询技术_读取数据_33

Mysql物理查询技术_读取数据_34


有序的表:Mysql在执行多表连接之前,先对表进行排序操作,即数据量小的表在前面,数据量多的表在后面;

Mysql物理查询技术_嵌套循环_35

 当连接的表的个数小于optimizer_search_depth时,Mysql使用的是穷举算法,把所有的连接顺序遍历一遍,从中找出最优的执行计划


如果optimizer_search_depth的值比较小,那么Mysql可能会丢掉一些可能的搜索值,可能的搜索顺序;


剪枝:减去一些连接的可能;

Mysql物理查询技术_mysql_36

通过关键字STRAIGHT_JOIN来强制Mysql来使用这种连接方式,即按照from关键字后面的表出现的顺序来连接表;



















举报

相关推荐

0 条评论