作家
登录

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

作者: 来源: 2017-05-11 13:03:55 阅读 我要评论

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

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

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

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

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

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

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

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

索引

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

  1. ALTER TABLE picture ADD INDEX(album_id); 

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

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

  1. ALTER TABLE album ADD INDEX(user_id); 

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

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

【编辑推荐】

  1. MySQL 5.7忘记root暗码及修改root暗码的办法
  2. 基于日记(binlog),若何完成MySQL主大年夜复制搭建
  3. MySQL数据库常用架构设计
  4. MySQL数据恢复的九把瑞士军刀
  5. MySQL并发引起的逝世锁问题
【义务编辑:枯木 TEL:(010)68476606】

  推荐阅读

  人们应将公共云与私有云的辩论抛之脑后

如今是时刻把公共云和私有/混淆云的┞幅辩抛之脑后了吗?就像Mac与PC,或开放与专有一样,似乎技巧上最大年夜的┞幅议就是保质期,并且在云基本架构上产生冲突的时光已经接近尾声。正如Inf>>>详细阅读


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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