MySQLjoin的自动优化

上传人:m**** 文档编号:497929843 上传时间:2023-03-01 格式:DOC 页数:9 大小:23.50KB
返回 下载 相关 举报
MySQLjoin的自动优化_第1页
第1页 / 共9页
MySQLjoin的自动优化_第2页
第2页 / 共9页
MySQLjoin的自动优化_第3页
第3页 / 共9页
MySQLjoin的自动优化_第4页
第4页 / 共9页
MySQLjoin的自动优化_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《MySQLjoin的自动优化》由会员分享,可在线阅读,更多相关《MySQLjoin的自动优化(9页珍藏版)》请在金锄头文库上搜索。

1、QLjoi的自动优化MySL的多表Join查询是会自动优化顺序的,本文将以一个实例讲述。1、首先,编写一个建表脚本eail160;protectd* * tet$ i catA.setet;DROP PRCDUREIF XISTS Pcrat;dp able i exiss;drop table ifexistsB;dr abeiexists C;create able (dnt() rmary key,ttl varcha(1),ontentvarchar(1),uint(1),tid int(11);cettableB(ud it()priar key,unamevarchr(16));c

2、rattal C(tid it() primaryey,tna varch(16),ae int(11));ELMITER /CREATErocedPcreate()# 创建无参存储过程BINDECLAREi INT default 0;WHEilt;4000 D 结束循环的条件: 当i大于n时跳出wie循环ISERT IO VALUES(i,cona(title,i),#;ntent#3;,i400,%100); # 往表添数据ST = i+1; #循环一次,i加1NWLE; #结束whle循环SELCT cont(*) RM ; 查看表数据set i=0;WHLE l;8000 结束循环的

3、条件: 当i大于n时跳出whle循环INSR ITO LUES(,oncat(#39;unam#39;,i); #往表添数据ET i = ; # 循环一次,i加EN WHL; #结束hil循环SEE cnt(*) FOM B; 查看表数据seti0;WHLE t;20 DO 结束循环的条件: 当i大于n时跳出whi循环SERT ITC VALUES(i,conat(9;tname#39;,i),i1); # 往表添数据STi= i+; # 循环一次,i加1ED WHE; # 结束while循环SLC cun()ROMC; 查看表数据E;/ 结束定义语句DELMIER ;# 重新将分隔符设置为;

4、ALL eat(); # 调用存储过程2、编写查询脚本ail#160;poteed/* */ tes vi sletjoin.sqse tst;explain lectoun() frm(SLECT .aid,A.tle, .nam,C.tname,Ca FR ALEFT OIN NA.ud=B.id lt JON C ON AtiC.ti whrC.aget;1) A;explain selec cnt(*) frm(slect AC.ad, C.title from (SELECT Aai, .ile, .uid, .nme, C.gFOM A LEFTOI AtC.ti whereC.a

5、lt;1)AC LEFT JOIN ON AC.ud=B.uid) B;、依次执行脚本看结果myql source/homerots/createA.sql略(1)去掉slectjoin.sq中的explain,执行Databas hnge+-+| con(*) |-+| 40 |+-+ row i st(008 se)+-+| cout(*) |+-+| 400 +-+1 ow in et (.08 se)发现两者居然时间相同,难道不应该第二个提前剪枝的更优么??。()执行explai查看执行计划ysql surce /home/otest/seectjoin.sqlReaing tabe

6、inoratior compleion of table andcolumn nasYou canur of th fetureto ga quk stu ith ADtabase change+-+-+-+-+-+-+-+-+-+-+-+| d | le_te |tle | parttins tpe possblekeys key ky_n | f | rws filteed |Exr -+-+-+-+-+-+-+-+-+-+-+| 1 SIMPE | | NL |AL | NU | NULL |NULL |NL 30 | 1000 | NLL | SMPL | C | ULL | eq_r

7、f | PRIMAY |PRIMAY | 4 | ts.A.id | 1| 3.33 | sng hee |1 SIML | B ULL | q_ref |PRA | PRIY | | test.Auid | 1 10.| singidx |+-+-+-+-+-+-+-+-+-+-+ rwin s, 1 warning (0.0 e)-+-+-+-+-+-+-+-+-+-| id| secttype | able | partion |y | possibeys | key |elen | rf | rows | filteed| xtra |+-+-+-+-+-+-+-+-+-+ | IMP

8、E | NUL | AL |NULL NUL | NULL |NUL |333| 00.00 NL | | SIM | C ULL | e_|RMARY PRIMR 4 s.ti | 1 33.33|Usg whee | | SIPL | |NUL eq_re | PRMARY | RIMARY | tet.Auid | 1| 100. | snind |+-+-+-+-+-+-+-+-3 rosnset, 1wrin (0.0sec)发现两者执行计划相同。4、结果分析MyQL执行语句过程中涉及到两大流程:优化器和执行器。其中优化器最主要的任务,是选择索引和在多表连接时选择连接顺序。join顺

9、序的选择会影响执行性能,确定in执行顺序就需要估算所有joi操作的代价。默认配置下MyL会估算所有可能的组合,由于MyQ里限制一个查询的oin表数目上限为1,所以MySQL有一个参数叫做optimizer_searchdeph,默认为62,限制优化器的深度。加入有20张表jn查询,如otimizer_serch_epth为4,则评估次数为20*191817。mysqshowariabeslike #39;%optiize_search_dep%3;;+-| Vaablenme | alu -+-+ optimzerseacdpth | 62 |+-+在本例中,MyQL优化器执行了优化,所以两者都选取了最优的顺序。1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号