头几天在网上看了一个帖子,描写的表象是在MySQL中,对in,or,unionall的机能的比对,看完以后,我就形成了疑难。
文章的粗心是说,行使in,or的查问效率较低,梗概查问需求消费11秒,而行使了unionall的方法以后,机能抬高到了0.02秒。
若是纯真说是MySQL半接连的优化器机能题目,我信,然而看了文中供给的SQL语句,我觉得起码从我行使MySQL5.7的觉得来看,这个不同会很小,也许说没有不同。
固然有这个主意,本身也得论证不是。我就试验了两次,文中说数据量梗概是20万纪录,那我就扩充一下,做一下万数据的测试,看看成就。
创立表article,
createtablearticle(idintprimarykey,article_categoryint);
行使以下的方法初始化数据。
delimiter$$dropprocedureifexistsproc_auto_insertdata$$createprocedureproc_auto_insertdata()begindeclareinit_dataintegerdefault1;whileinit_data=0000doinsertintoarticlevalues(init_data,1);insertintoarticlevalues(init_data+1,2);insertintoarticlevalues(init_data+2,3);insertintoarticlevalues(init_data+3,4);insertintoarticlevalues(init_data+4,5);setinit_data=init_data+5;endwhile;end$$delimiter;
插入数据,这个部份,我起用了显式事情,成就很显然。在本机测试万的数据量梗概是21秒钟便可结尾。
接续运转上头的语句,机能还不错,基础都在1秒钟(固然数据是在缓存内部),三种方法的机能有不同,然而远没有稳中说得那末大了。
是不是数据量还不敷呢,咱们接续做一个测试,把初始化数据库修正成0万,再来看看成就。
咱们接续做一个优化革新,创立一个索引出来。数据量扩充10倍,为0万。
altertablearticleaddkey(article_category,id);
再来看看成就发掘上头的3个语句的施行效率相仿。
经过上的测试,充足注通达在MySQL5.7的测试中,这个题目严厉来讲不是题目,大概是版本相关,再有一个是行使了更多的数据,机能却显然好很多。这个大概和表机关有一些进出。
总之,咱们获得一个开端的论断,很大概本身测试的时分却没有,需求理性对待。以免获得过错的论断。
r13条记第90天