MySQL里几个查询语句的性能优化论证

头几天在网上看了一个帖子,描写的表象是在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天




转载请注明:http://www.aierlanlan.com/rzfs/1160.html