mysql的物理排序是_Mysql物理查询技术 | 学步园

5b74a03ad5efbf1822bf090311aa0505.png

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

871a5706eaf8316be74408695777c393.png

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

(2):不同表的连接方式,有不同的消耗;块嵌套循环连接

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

4bd934ce9f0a078aa657a6c2d0be0d83.png

5e44c1cda15b71aa8870b24e0b166297.png

图:物理查询优化技术

40bbfd9b73d9cb42580f0d7289896bc7.png

023c93f41006b5ab38943399fe313f7f.png

86e029136c6c8fff6c837e184e1c5272.png

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

844a77519f23a82db90ebf6ad521baae.png

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

9240cdee42e693657dbb59e5e3bbf2c7.png

1986e93c288fd2113edb44b1e247a863.png

115a594e3a45bba06887cf4dd8dd268a.png

f42d25189a3daf0fdc6f801264ed28f1.png

87760e533116d0ddc2d9b81b5a751dc2.png

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

bad14ae99bcd6aab9adb1ccb506d9892.png

cc61c215594eeb6dd04c10e71bacce28.png

5391b2c511521ed1a84b24e902e7cc91.png

51dfa86abdd213350aa1070b86a1298f.png

faaefdf63f81ca2e889e401c91608949.png

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

36b7a70dadab576af1710f92beb0da15.png

91cd888ada7bc5ece1dec702d8472be0.png

ff6774550b81281d120c5bf2df7a7278.png

ca03572529d0a2ae3253106b6f033bad.png

eabaf6b009c77b6245bec61b4b835020.png

Memory代价:内存拷贝代价;

Remote代价:远程代价;

283a44f2d90797e08d248f7f86705e91.png

1fc86f9c4259082f8ef7838d6ec61f81.png

type:ALL表示全表扫描;

8a71780969720ff6100bda9c08dffa29.png

41789ca3001bd4e2b7835bd5f269b710.png

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

35338b9190a4ccf1657fde4ba9e2f5b5.png

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

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

f740261f4650b70771397b444987c82f.png

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

04aa360f50d97dbbd60e3af5deb45bc0.png

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

a4583c6a897f7d18fec6f4f9d8ae56b6.png

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

bef099128d556f430e21d7b79536e6b1.png

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算法;

32eda0bf27457f56d1f7ff748913f938.png

5253d9f2157cc177f3c7015b5222bcf1.png

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

8b6bd8e7d714d14c72028ad3509fc1b8.png

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

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

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

33f774e36e29100971e3fefdd6beafec.png

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值