在进行性能分析前,需要先定位耗时查询。

MySQL提供了内建的耗时查询日志。使用前,打开my.cnf文件,将slow_query_log设置为"On"。同时将long_query_time设置为一个对一次查询来说比较慢的时间(秒数),比如0.2。slow_query_log_file设置为你想保存日志文件的路径。然后运行代码,执行时间超过设定上限的查询将会被记录到日志中。

一旦定位这些烦人的查询,就可以探究慢的原因。MySQL提供了 EXPLAIN 关键字。可以与SELECT、DELETE、INSERT、REPLACE、UPDATE语句一起使用。只需要如下一样添加到查询开始处:

EXPLAIN SELECT picture.id, picture.title

FROM picture

LEFT JOIN album ON picture.album_id = album.idWHERE album.user_id = 1;

结果是对数据访问过程的解析。每行代表一个查询相关的数据表:

重点是表名、使用的key、查询执行时所扫描的行数。

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

索引

使用索引,可以极大提升性能。比如地址簿中的名字。找一个名字,你可以从头翻到尾,也可以找到相应的字符标签页来快速定位。

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

ALTER TABLE picture ADD INDEX(album_id);

现在执行查询,就不会扫描整个picture列表了。首先,所有的album表会被扫描以找到属于该用户的album,然后,使用album_id列索引快速定位对应的picture。扫描的行数减少到了20万,比原始查询快了317倍。

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

ALTER TABLE album ADD INDEX(user_id);

这次,album表不会被全部扫描,通过user_id键就可以精确定位相应的album。然后这100个album被扫描后,通过album_id键相关的picture也可以快速找到。每张表都用到了一个键进行查询性能优化,结果比原始查询快了380倍。

但是并不意味着可以随意添加索引,因为索引会导致写数据库用时增长。所以使用索引导致读用时缩短,写用时增长。因此,如果能提升读性能时再添加索引。使用EXPLAIN来确认索引是否被查询用到,没有就删除。

文章原址:https://www.yidianzixun.com/article/0GJbYELr

转载于:https://www.cnblogs.com/liuxiaowei/p/7163536.html

如何将你的 MySQL 查询速度提升 300 倍相关推荐

  1. 使用Apache Spark让MySQL查询速度提升10倍以上

    作者:Alexander Rubin 链接:http://coyee.com/article/11012-how-apache-spark-makes-your-slow-mysql-queries- ...

  2. 查询速度提升200倍,ClickHouse到底有多快?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取个gui 来源:r6a.cn/a8UZ ClickHouse 是 Yande ...

  3. 6条策略提高mysql查询速度 潇湘博客

    6条策略提高mysql查询速度 1,表设计一定要优化,冗余数据最少,少用连接查询.如果在实际应用中,使用了极其复杂的连接,子查询,则数据表的设计得要重新考虑了. 2,尽量用char而不是varchar ...

  4. MySQL 查询速度慢与性能差的原因与解决方法

    MySQL 查询速度慢与性能差的原因与解决方法 更新时间:2019年09月26日 18:05:47 作者:Microtiger 随着网站数据量与访问量的增加,MySQL 查询速度慢与性能差的问题就日渐 ...

  5. 腾讯云数据库开源再突破:TDSQL PG版查询性能提升百倍

    日前,腾讯云数据库开源产品TDSQL PG版(开源代号TBase)宣布推出重磅升级--经过一年半的打磨,上万张表访问场景下,内存占用节省60%:查询性能提升百倍:SQL语句兼容性增强.同时,大力提升原 ...

  6. 优化:一种将grid-search速度提升10倍的方法

    Python 2.7 IDE Pychrm 5.0.3 sci-kit learn 0.18.1 前言 抖了个机灵,不要来打我,这是没有理论依据证明的,只是模型测试出来的确有效,并且等待时间下降(约) ...

  7. AI一分钟 | 李开复:AI创业公司估值今年会降20%~30%;谷歌让搜索结果加载速度提升两倍...

    ▌李开复:AI 创业公司估值今年会降 20%~30% 创新工场创始人李开复的新书<AI·未来>昨天正式全球发售,在发布现场,李开复谈到目前国内 AI 创业企业现状时表示,今年国内 AI 创 ...

  8. ZippyPoint: 一种基于学习的特征点提取+二进制描述子,速度提升5倍+,为移动平台提供一种ORB的替代方案...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Realcat 来源丨 计算机视觉SLAM 作者来自ETHZ Computer Vision实验 ...

  9. 谷歌发布TF新工具:计算速度提升2倍,减少无效参数

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一顿操作后,需要实时模糊背景的视频,看起来流畅了不少: 实时目标检测的延迟也更低了: 这是谷歌特意为移动设备和Web端开发的一系列新工具,可 ...

  10. 【云原生AI】Fluid + JindoFS 助力微博海量小文件模型训练速度提升 18 倍

    简介: 深度学习平台在微博社交业务扮演着重要的角色.计算存储分离架构下,微博深度学习平台在数据访问与调度方面存在性能低效的问题.本文将介绍微博内部设计实现的一套全新的基于 Fluid(内含 Jindo ...

最新文章

  1. ant Design Pro 登录状态管理
  2. java布局工具,Java Swing:库,工具,布局管理器
  3. 你不知道的z-index
  4. LeetCode Algorithm 1290. 二进制链表转整数
  5. 【Linux】一步一步学Linux——domainname命令(172)
  6. vector动态数组
  7. github上面如何编辑README
  8. 第77课 交作业啦(递归算法)
  9. comsol圆柱形永磁体_永磁体模拟快速入门
  10. 【luogu P2341 [HAOI2006]受欢迎的牛】 题解
  11. Verilog之闪烁灯
  12. 聊聊cortex的Backoff
  13. 多线程编写12306售票系统
  14. 宝宝为什么不吃奶粉,奶爸必读文章
  15. 【键盘】jQuery+CSS3模拟键盘事件(精)
  16. 重庆大学计算机科学与工程学院,何中市
  17. WebServer应用示例2:Siri语音识别读取传感器数据 | ESP32轻松学(Arduino版)
  18. iOS常用快捷键/终端常用指令
  19. python2.7安装 scipy
  20. 有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n <= 100000),有多少中组合可以组成n分钱?

热门文章

  1. 基于httpd的mod_deflate模块
  2. 修改Myecclipse servlet/jsp的默认模板
  3. Android通过NTP服务器取得UTC标准时间
  4. 修改Maven默认编译级别
  5. 简单php网站的mysql优化小结
  6. 在Linux下轻松搭建自己的DNS服务器
  7. Cisco 静态nat配置
  8. json mysql php_PHP MySQL连接表作为JSON
  9. Nginx源码阅读 ---- 模块的初始化过程,工作进程中初始化事件模块
  10. mysql8.0 i ha,centos7 mysql8.0 RPM软件包方式安装