mysql 性能优化的简单办法

优化数据库最核心的实际上就是配置参数的调整。本文通过一个简单的参数调整,实现了对拥有一个几十万行表的 group by 优化的例子。通过这个简单的调整,数据库性能有了突飞猛进的提升。

本例子是针对 MySQL 调整的,不像其他商业数据库,MySQL 没有视图,特别是 Oracle 可以利用固化视图来提升查询性能,没有存储过程,因此性能的调整几乎只能通过配置合适的参数来实现。

调整的具体步骤(例子针对 pLog 0.3x 的博客系统):

发现最多的 slow log 是:

SELECT category_id, COUNT(*) AS ‘count’ FROM plog_articles WHERE blog_id = 2 AND status = ‘PUBLISHED’ group by category_id;

一般在 20s 以上,甚至 30s 。

而当 blog_id=1 或者其他时,都能很快的选出结果。

于是怀疑索引有问题,重新建立索引,但无济于事。 EXPLAIN 结果如下:

mysql> EXPLAIN SELECT category_id, COUNT(*) AS ‘count’ FROM plog_articles WHERE blog_id = 2 AND status = ‘PUBLISHED’ group by category_id;

+—————+——+——————+——————+———+————-+——+———————————————-+

| table | type | possible_keys | key | key_len | ref | rows | Extra |

+—————+——+——————+——————+———+————-+——+———————————————-+

| plog_articles | ref | idx_article_blog | idx_article_blog | 5 | const,const | 4064 | Using where; Using temporary; Using filesort |

+—————+——+——————+——————+———+————-+——+———————————————-+

1 row in set (0.00 sec)

于是想到每次查看 blog_id = 2 的博客时,系统负载就提高,有较高的 swap 。于是查看 temporary table 有关的资料,果然有这样的说法:

If you create a lot of disk-based temporary tables, increase the size of tmp_table_size if you can do so safely. Keep in mind that setting the value too high may result in excessive swapping or MySQL running out of memory if too many threads attempt to allocate in-memory temporary tables at the same time. Otherwise, make sure that tmpdir points to a very fast disk that’s not already doing lots of I/O.

Another problem that doesn’t show up in the slow query log is an excessive use of disk-based temporary tables. In the output of EXPLAIN, you’ll often see Using temporary. It indicates that MySQL must create a temporary table to complete the query. However, it doesn’t tell you whether that temporary table will be in memory or on disk. That’s controlled by the size of the table and MySQL’s tmp_table_size variable.

If the space required to build the temporary table is less than or equal to tmp_table_size, MySQL keeps it in memory rather than incur the overhead and time required to write the data to disk and read it again. However, if the space required exceeds tmp_table_size, MySQL creates a disk-based table in its tmpdir directory (often /tmp on Unix systems.) The default tmp_table_size size is 32 MB.

To find out how often that happens, compare the relative sizes of the Created_tmp_tables and Created_tmp_disk_tables counters:

调整 tmp_table_size为 80M 左右后,以上语句 14s 即可解决。

原创文章,转载请注明: 转载自搞代码

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

mysql 代码怎么优化_MySQL 性能优化的简略办法相关推荐

  1. mysql效率优化_MySQL性能优化的最佳12条经验

    数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时 ...

  2. Mysql删除语句优化_MySQL性能优化之常用SQL语句优化

    SQL性能优化的目标:至少要达到range级别,要求是ref级别,consts最高.[阿里巴巴JAVA开发手册] 说明: 1).consts单表中最多只有一个匹配行(主键/唯一索引),在优化阶段即可读 ...

  3. mysql not in优化_MySQL性能优化 — 实践篇2

    点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 MySQL索引底层数据结构与算法 ...

  4. mysql 阿里云 优化_MySQL性能优化速记

    总结自<MySQL 5.7从入门到精通(视频教学版)>刘增杰编著. 优化简介 MySQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度. 在MySQL中,可 ...

  5. mysql 代码怎么优化_Mysql性能优化

    1,SQL语句中in包含的值不应过多 Mysql对于in做了相应的优化,即将in中的常量全部存储在一个数组里面,而这个数组是排好序的.但是对于数值较多,产生的消耗也比较大的: 例如: select i ...

  6. mysql 字符串索引 优化_MySQL性能优化之索引调优实战

    索引失效场景或使用注意事项 a.索引无法存储null值,所以建议都给默认值 b.如果条件中有or,即使使用了索引条件也不起作用,所以尽量少用or 如果想使用or,又让索引生效,只能将or的每个列上加上 ...

  7. mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)

    一 题记 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语 ...

  8. mysql 8 配置参数优化_MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  9. 熟悉mysql数据库设计和性能优化_MySQL性能优化学习笔记-(1)数据库设计

    一.数据库设计 1.数据类型优缺点分析 数据类型的选择要遵循的总体原则 更小的通常更好 一般情况下,应该尽量选择使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,因为它们站用更小的磁盘.内存 ...

最新文章

  1. [微信小程序]物流信息样式加动画效果(源代码附效果图)
  2. MVC中,视图的Layout使用
  3. Android Jetpack LiveData 源码解析
  4. QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码
  5. 2021年5月信息系统项目管理师案例分析真题+视频讲解(1)
  6. linux100day(day4)--文本处理三剑客
  7. Duboo入门示例(Idea开发环境)
  8. matlab输出高分辨率图片有白色毛刺,科学网—图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图 - 杨小林的博文...
  9. 防抓包重放php,超简单最基本的WEB抓包改包重放的方法
  10. html图片分类插件,Quicksand-jQuery超酷图片分类插件
  11. HNOI2019 退役记
  12. c语言判断输入类型是否为指定类型?
  13. 小米路由器青春版刷潘多拉、华硕固件
  14. tcl语言读取文件一行_TCL语言(九) 路径和文件
  15. 如何解决应用程序无法启动,因为应用程序的并行配置不正确问题
  16. php之——常用的字符串函数
  17. JS初学者使用jQuery开发一款弹幕射击游戏
  18. 微信支付只为移动游戏而生,仅仅是腾讯Q币的备胎
  19. containers matlab,Matlab 中实用数据结构之 containers.Map
  20. 诚之和:裁员、关店,贝壳内部正在发生一场博弈?

热门文章

  1. nginx coredump 不产生core文件
  2. 深入理解Nginx 模块开发与架构解析-陶辉 读书笔记
  3. map/multimap用法详解
  4. 全球最权威人脸识别测试,中国团队依图科技夺得第一
  5. Hadoop权威指南 _04_第I部分Hadoop基础知识_第2章关于MapReduce
  6. Logisim 一个PLA电路
  7. C# 什么是【事件驱动】
  8. C/C++多个链接库含有同名函数,编译会报错吗
  9. Kafka使用Java客户端进行访问
  10. 操作系统-信号量的使用