java开发的应用系统经常面临系统响应时间过长的情况,可能的原因有很多方面,比如网络延迟、代码逻辑不合理,数据量太大、架构设计不合理、慢查询等。在优化的时候不能一上来就扑倒sql调优上,要整体查看性能损耗最大的地方在哪里,然后对症下药。

今天主要探讨的是从数据库下手可以做哪些优化。对mysql数据库进行优化也有以下几个维度来进行。从上到下,优化的投入产出比越来越小,意味着sql与索引层面的优化消耗的成本低,带来的回报大,而硬件与操作系统层面的优化成本高,回报相对没有那么大。

1.SQL与索引

a.对sql的优化一般先通过满日志定位查询效率慢的sql语句,然后用explain分析sql执行计划。重点需要关注type、rows、filtered、extra。

type由上至下,查询效率system>const>eq_ref>ref>range>index>all,一般要达到range级别,最好达到ref,否则需要优化

  • ALL 全表扫描;

  • index 索引全扫描;

  • range 索引范围扫描,常用语<,<=,>=,between,in等操作;

  • ref 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中;

  • eq_ref 类似ref,区别在于使用的是唯一索引,使用主键的关联查询;

  • const/system 单条记录,系统会把匹配行中的其他列作为常数处理,如主键或唯一索引查询;

  • null MySQL不访问任何表或索引,直接返回结果;

  • 虽然上至下,效率越来越高,但是根据cost模型,假设有两个索引idx1(a, b, c),idx2(a, c),SQL为"select * from t where a = 1 and b in (1, 2) order by c";如果走idx1,那么是type为range,如果走idx2,那么type是ref;当需要扫描的行数,使用idx2大约是idx1的5倍以上时,会用idx1,否则会用idx2。

b.show profile分析

了解SQL执行的线程的状态及消耗的时间。默认是关闭的,开启语句“set profiling = 1;”

SHOW PROFILES ;SHOW PROFILE FOR QUERY  #{id};

c.trace

trace分析优化器如何选择执行计划,通过trace文件能够进一步了解为什么选择A执行计划而不选择B执行计划。

set optimizer_trace="enabled=on";set optimizer_trace_max_mem_size=1000000;select * from information_schema.optimizer_trace;

d.确定问题并采用相应的措施

  • 创建索引或联合索引

  • 用小表驱动大表

  • select时候用具体字段代替*号

  • 避免导致索引时效的表达式,如NOT、!=、<>、!<、!>、NOT IN、NOT LIKE)和模糊查询%

  • 避免返回大量数据,增加分页

  • 避免属性隐式转换

2.表结构与存储引擎

1)为了减少关联查询,可以增加冗余字段

2)将大量数据按日期或分类拆分成小表

3)修改表字段属性为not null

4)存储引擎InnoDB适合并发大更新多场景,MyIASM适合查询插入操作多

3.MYSQL配置

1)max_connections:多个应用或请求同时访问数据库,导致连接数不够,可以增加最大连接数

2)wait_timeout:及时释放不活动的连接,客户端默认超时时间是28800秒,即8小时,可以把这个值调小

4.数据库架构

1)缓存,增加redis缓存

2)集群,主从复制,读写分离

3)分库分表

5.硬件与操作系统

增加硬件数量或者提升硬件配置

java系统性能优化之mysql数据库优化相关推荐

  1. mysql数据库优化skip_优化配置mysql数据库优化

    在整体的系统运行过程中,数据库服务器 MySQL 的压力是最大的,不仅占用很多的内存和 cpu 资源,而且占用着大部分的磁盘 io 资源, 连 PHP 的官方都在声称,说 PHP 脚本 80% 的时间 ...

  2. mysql数据库优化课程---13、mysql基础操作

    mysql数据库优化课程---13.mysql基础操作 一.总结 一句话总结:mysql复制表,索引,视图 1.mysql如何复制表? like select * 1.复制表结构 create tab ...

  3. 菜鸟的mysql高级进阶以及mysql数据库优化

    菜鸟的mysql高级进阶以及mysql数据库优化 说明 一.mysql的逻辑分层及存储引擎 (1)逻辑分层 (2)存储引擎 二.事务的ACID原则 三.数据库设计的三大范式 四.索引 (1)二叉树搜索 ...

  4. 【转载】运维角度浅谈MySQL数据库优化

     运维角度浅谈MySQL数据库优化 2015-06-02 14:22:02 标签:mysql优化   mysql分库分表分区 mysql读写分离 mysql主从复制 原创作品,允许转载,转载时请务必以 ...

  5. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  6. mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...

    mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...

  7. mysql数据库优化大全_MySQL数据库优化技巧大全

    简介: MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进 ...

  8. mysql开发java心得_关于mysql 一些优化心得

    先介绍下服务器架构及配置8核8G,10M带宽Centos6.5 64 Nginx   1.8.1PHP      5.3.29Mysql    5.5.42 一电商网站后台查询订单时 经常php超时, ...

  9. mysql数据库优化课程---6、mysql结构化查询语言有哪些

    mysql数据库优化课程---6.mysql结构化查询语言有哪些 一.总结 一句话总结:主要分为四类 1.DCL 数据控制语言 1)grant 2)commit 3)rollback 2.DDL 数据 ...

  10. mysql数据库技术方案,MySql数据库优化方案

    一.方案概述 优化现有mysql数据库. 二.方案优缺点 优点:不影响现有业务,源程序不需要修改代码,成本最低. 缺点:有上限,数据量过亿就不行了. 三.方案实施细则 1.数据库设计和表创建时就要考虑 ...

最新文章

  1. 汪卫华院士:无序中找有序 复杂中寻规律
  2. c#实现客户端程序自动下载更新(单独程序)
  3. buffer sort Oracle,[转]BUFFER SORT是BUFFER却不是SORT
  4. format控制输出 python_【Python】之format奇技淫巧的输出控制
  5. 原创 深度 技术:WatchStor焦点周刊创刊号
  6. 代码模板在哪里_C++的可变参数模板
  7. h5获取http请求头_nodejs 中http请求头,响应头
  8. php 调用带返回多个结果集的方法,PHP中有多个结果集?
  9. 常用CSS代码片段常见css bug
  10. 网易严选搜索推荐实践之:“全能选手”召回表征算法实践.pdf(附下载链接)...
  11. Winform 窗体关闭事件
  12. linux性能监测工具
  13. graphpad prism柱状图横坐标斜着_GraphPad Prism绘图教程 | 如何制作对数坐标的图表...
  14. linux不同版本编译,嵌入式ARM+Linux 多个不同版本的交叉编译器的切换方法
  15. 递归算法php,PHP递归算法的详细示例分析
  16. 黑客教父郭盛华:11个IDA Pro反汇编程序的替代品
  17. 扫描文件存电子版方法
  18. keras交通信号识别(分类)
  19. win10开启自带的手机投屏功能方式
  20. 呵护眼睛,从小事做起

热门文章

  1. Other - 个人对知识讨论、分享等平台上抄袭乱象的看法
  2. Android ListView焦点事件冲突问题与解决
  3. python的基础网络编程是下列_python基础 - 网络编程
  4. php添加pdo_mysql_php下添加pdo_mysql扩展
  5. face_recognition初始
  6. Python图像处理](2)---图像融合、加法运算及图像类型转换、图像缩放、图像旋转、图像翻转与图像平移
  7. An NVIDIA kernel module ‘nvidia-drm‘ appears to already be loaded in your kernel...
  8. JVM知识点复习(第一次)
  9. HTML + CSS + JS知识点复习(第一次)
  10. QT 设置QDialog显示与隐藏系统按钮(最大小化等)