MySQL供给了内建低砟瓯萌芽日记。应用前,打开my.cnf文件,将slow_query_log设置为"On"。 同时将long_query_time设置为一个对一次萌芽来说比较慢的时光(秒数),比如0.2。slow_query_log_file设置为你想保存日记文件的路径。然后运行代码,履行时光跨越设定上限的萌芽将会被记录到日记中。
一旦定位这些常人的萌芽,就可以商量慢的原因。MySQL供给了EXPLAIN关键字。可以与SELECT、DELETE、INSERT、WordStr、UPDATE语句一路应用。只须要如下一样添加到萌芽开端处:EXPLAINSELECTpicture.id, picture.title
FROMpicture
LEFTJOINalbumONpicture.album_id = album.idWHEREalbum.user_id = 1;
结不雅是对数据拜访过程的解析。每行代表一个萌芽相干的数据表:
重点是表名、应用的key、萌芽履行时所扫描的行数。
这个萌芽扫描了picture表2百万行,对每个picture记录扫描了album表2万行。意味着,该萌芽实际扫描了album表400亿行。这个过程可以更高效。
索引
应用索引,可以极大年夜晋升机能。比如地址簿中的名字。找一个名字,你可以大年夜头翻到尾,也可以找到响应的字符标签页来快速定位。
应用索引可以避免无须要的表扫描。比如在picture.album_id上添加索引:ALTERTABLEpictureADDINDEX(album_id);
在进行机能分析前,须要先定位耗时萌芽。
如今履行萌芽,就不会扫描全部picture列表了。起首,所有的album表会被扫描以找到属于该用户的album,然后,应用album_id列索引快速定位对应的picture。扫描的行数削减到了20万,比原始萌芽快了317倍。
按照以下方法添加索引可以确保两张表都能应用对应键:ALTERTABLEalbumADDINDEX(user_id);
此次,album表不会被全部扫描,经由过程user_id键就可以准肯定位响应的album。然后这100个album被扫描后,经由过程album_id键相干的picture也可以快速找到。每张表都用到了一个键进行萌芽机能优化,结不雅比原始萌芽快了380倍。
【编辑推荐】Python操作MySQL根本情况搭建及增删改查实现
在Docker中运行MySQL:多主机收集下Docker Swarm模式的容器治理
Java中若何应用嵌入MySQL
将数据大年夜MySQL迁徙到Oracle的留意事项
我必须得告诉大年夜家的MySQL优化道理【义务编辑:51CTO_OS TEL:(010)68476606】
然则并不料味着可以随便添加索引,因为索引会导致写数据库用时增长。所以应用索引导致读用时缩短,写竽暌姑时增长。是以,如不雅能晋升读机能时再添加索引。应用EXPLAIN来确认索引是否被萌芽用到,没有就删除。
推荐阅读
多云模型面对着独特的设备治理挑衅。被选择一个对象时,企业应当细心比较云本地和第三方的选项。但企业面对着一个重要选择:在公有云中应用本地设备办事,照样应用第三方对象,如Ansible 和CFengine。这一选择并不简>>>详细阅读
地址:http://www.17bianji.com/lsqh/35138.html