一次mysql查询优化过程-evanxia.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一次mysql查询优化过程-evanxia

一次Mysql 查询优化过程 By evanxia 2016.06.27 背景:应项目需求,目前有一个业务需要每分钟向数据库中插入一批数据,然后另一个程序会从数据库中读取某一时间段内,某些特征的数据。随着时间的积累,数据量提升,查询时间爆发式增加,不得不优化数据库。本次优化只考虑了特定的查询优化,没有考虑优化后插入效率,为了减轻影响批量插入时采用的是一条insert...values(),()...形式语句。以下记录查询优化过程。 准备 先介绍一下,可能会使用到的mysql相关的工具。 清除查询缓存: reset query cache; 清理查询缓存碎片以提高内存使用性能: FLUSH QUERY CACHE; MySQL查询分析器: EXPLAIN或DESC 二、简单测试 2.1、环境 数据库: mysql Ver 14.14 Distrib 5.5.49, for debian-linux-gnu (x86_64) using readline 6.3 数据: 2801178条记录 腾讯云服务器: Linux VM-122-135-ubuntu 3.13.0-36-generic #63-Ubuntu SMP Wed Sep 3 21:30:07 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 资源[dmidecode |more]: CPU:单核,最大 2000 MHz 内存: 1 GB 2.2、测试 1、未加索引 A、EXPLAIN SELECT id, connect_count, total_count, monitor_rate,`time`,CAST((connect_count/ total_count)*100 AS UNSIGNED) as rate FROM statistics_data where statistics_id in (20,21,22, 23, 24, 25) and `time` between 1469319304 and 1469405704 order by `time`; 2、建立time索引 ALTER TABLE `statistics_data` ADD INDEX ( `time` ) ; 清空缓存:reset query cache; 检索: A、EXPLAIN SELECT id, connect_count, total_count, monitor_rate,`time`,CAST((connect_count/ total_count)*100 AS UNSIGNED) as rate FROM statistics_data where statistics_id in (20,21,22, 23, 24, 25) and `time` between 1469319304 and 1469405704 order by `time`; B、分析发现没有使用time索引,所以强制使用 EXPLAIN SELECT id, connect_count, total_count, monitor_rate,`time`,CAST((connect_count/ total_count)*100 AS UNSIGNED) as rate FROM statistics_data force index (time) where statistics_id in (20,21,22, 23, 24, 25) and `time` between 1469319304 and 1469405704 order by `time`; 3、between换为 清空缓存:reset query cache; 检索: EXPLAIN SELECT id, connect_count, total_count, monitor_rate,`time`,CAST((connect_count/ total_count)*100 AS UNSIGNED) as rate FROM statistics_data where statistics_id in (20,21,22, 23, 24, 25) and `time` 1469319304 and `time` 1469405704 order by `time`; 4、建立statistics_id索引 ALTER TABLE `statistics_data` ADD INDEX ( `statistics_id` ) ; 清空缓存:reset query cache; 检索 EXPLAIN SELECT id, connect_count, total_c

文档评论(0)

zhuwo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档