作家
登录

如何将你的MySQL查询速度提升300倍

作者: 来源: 2017-05-11 09:06:12 阅读 我要评论

MySQL供给了内建低砟瓯萌芽日记。应用前,打开my.cnf文件,将slow_query_log设置为"On"。 同时将long_query_time设置为一个对一次萌芽来说比较慢的时光(秒数),比如0.2。slow_query_log_file设置为你想保存日记文件的路径。然后运行代码,履行时光跨越设定上限的萌芽将会被记录到日记中。

若何将你的MySQL萌芽速度晋升300倍

若何将你的MySQL萌芽速度晋升300倍

一旦定位这些常人的萌芽,就可以商量慢的原因。MySQL供给了EXPLAIN关键字。可以与SELECT、DELETE、INSERT、WordStr、UPDATE语句一路应用。只须要如下一样添加到萌芽开端处:

  1. EXPLAIN SELECT picture.id, picture.title 
  2. FROM picture 
  3. LEFT JOIN album ON picture.album_id = album.id
WHERE album.user_id = 1; 

结不雅是对数据拜访过程的解析。每行代表一个萌芽相干的数据表:

重点是表名、应用的key、萌芽履行时所扫描的行数。

若何将你的MySQL萌芽速度晋升300倍

这个萌芽扫描了picture表2百万行,对每个picture记录扫描了album表2万行。意味着,该萌芽实际扫描了album表400亿行。这个过程可以更高效。

索引

应用索引,可以极大年夜晋升机能。比如地址簿中的名字。找一个名字,你可以大年夜头翻到尾,也可以找到响应的字符标签页来快速定位。

应用索引可以避免无须要的表扫描。比如在picture.album_id上添加索引:

  1. ALTER TABLE picture ADD INDEX(album_id); 

在进行机能分析前,须要先定位耗时萌芽。

如今履行萌芽,就不会扫描全部picture列表了。起首,所有的album表会被扫描以找到属于该用户的album,然后,应用album_id列索引快速定位对应的picture。扫描的行数削减到了20万,比原始萌芽快了317倍。

若何将你的MySQL萌芽速度晋升300倍

按照以下方法添加索引可以确保两张表都能应用对应键:

  1. ALTER TABLE album ADD INDEX(user_id); 

若何将你的MySQL萌芽速度晋升300倍

此次,album表不会被全部扫描,经由过程user_id键就可以准肯定位响应的album。然后这100个album被扫描后,经由过程album_id键相干的picture也可以快速找到。每张表都用到了一个键进行萌芽机能优化,结不雅比原始萌芽快了380倍。

【编辑推荐】

  1. Python操作MySQL根本情况搭建及增删改查实现
  2. 在Docker中运行MySQL:多主机收集下Docker Swarm模式的容器治理
  3. Java中若何应用嵌入MySQL
  4. 将数据大年夜MySQL迁徙到Oracle的留意事项
  5. 我必须得告诉大年夜家的MySQL优化道理
【义务编辑:51CTO_OS TEL:(010)68476606】

然则并不料味着可以随便添加索引,因为索引会导致写数据库用时增长。所以应用索引导致读用时缩短,写竽暌姑时增长。是以,如不雅能晋升读机能时再添加索引。应用EXPLAIN来确认索引是否被萌芽用到,没有就删除。



  推荐阅读

  为多云平台选择云配置管理工具

多云模型面对着独特的设备治理挑衅。被选择一个对象时,企业应当细心比较云本地和第三方的选项。但企业面对着一个重要选择:在公有云中应用本地设备办事,照样应用第三方对象,如Ansible 和CFengine。这一选择并不简>>>详细阅读


本文标题:如何将你的MySQL查询速度提升300倍

地址:http://www.17bianji.com/lsqh/35138.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)