java系统性能优化之mysql数据库优化

article/2025/8/23 7:12:04

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.硬件与操作系统

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


http://chatgpt.dhexx.cn/article/fsDoxwFD.shtml

相关文章

数据库优化之中间表

过一段时间回看之前项目的数据库设计都忍不住吐槽&#xff0c;这谁写的&#xff08;我自己&#xff09;&#xff0c;当然也说明自己进步了哈。 本篇主要从性能和编码方便的角度来看中间表的使用。 昨天看原来写的数据库就发现了问题&#xff01;背单词app&#xff0c;单词书和…

浙江工业大学2023考研计算机学硕经验贴

文章目录 前言经验分享作息数学英语政治408 总体建议吐槽资源分享后面就是复试了选导师最后 前言 再开始前&#xff0c;先说一下自身情况&#xff0c;本人本科是浙江万里学院毕业的&#xff0c;同时也是一名二战生&#xff0c;一战的时候报的也是浙工大计算机学硕&#xff0c;…

杭电计算机研究生复试题

一、数据结构 线性存储和链式存储优缺点比较 1.1. 线性表的存储结构&#xff0c;优缺点 顺序存储结构可以直接存取数据元素&#xff0c;方便灵活、效率高&#xff0c;但插入、删除操作时将会引起元素的大量移动&#xff0c;因而降低效率。 链接存储结构中内存采用动态分配&am…

java 函数概述

函数 函数的定义函数调用函数分类局部变量方法重载函数递归 函数的定义 Java中函数也叫方法&#xff0c;是定义在类中的一段独立的代码块&#xff0c;用来实现某个功能&#xff1b;作用是提高代码的复用性和可读性。 语法格式&#xff1a; 修饰符 返回值类型 函数名(形式参数…

java中函数的应用。

我们把函数的特点和定义说完之后&#xff0c;我们来说说java中函数的基本应用。我们在编写程序其实就是在不断的实现功能&#xff0c;而java中最小的功能单元就是函数&#xff0c;所以我们日后再定义功能&#xff0c;都定义在一个独立的函数中去&#xff0c;而不要再乱七八糟塞…

Java函数总结

一.什么是函数&#xff1a; 为了解决某一特定问题&#xff0c;具有名称的的代码集合。JAVA函数也可以叫做方法&#xff0c;要调用方法可以通过对象去调用方法&#xff08;如果方法是非静态的&#xff09;&#xff0c;也可以直接用类名去调用方法&#xff08;如果方法是静态的&a…

JAVA方法(函数)的概念

JAVA中函数的概念&#xff0c;什么是函数&#xff1f; 答&#xff1a;函数英文称function,单一或相关联功能用来实现指定 要求功能的代码块&#xff0c;就是函数&#xff0c;函数在项目组可以直接进行调用且实现独立的功能&#xff0c;应对不同的实现需求的各种实现方法&#x…

Java方法(函数)

文章目录 Java方法(函数)一、方法介绍二、方法的定义和调用格式1. 快速入门2. Debug查看方法的执行流程3. 方法调用内存图解4. 带参数方法的定义和调用1&#xff09;定义和调用格式2&#xff09;形参和实参 5. 带返回值方法的定义和调用6. 方法通用定义格式 三、方法常见问题四…

java中的函数(概述)

java中的函数是比较重要的一个知识点。那么函数到底是什么呢&#xff0c;我们可以通过几点来进行学习&#xff0c;第一个是定义&#xff0c;第二个是特点&#xff0c;第三个是应用&#xff0c;第四个是重载。其中最重要的当然是函数的应用。定义和特点是为了入门所应用的&#…

JAVA函数(方法)

函数的概念&#xff1a; 函数是定义在类中的一段独立的代码块&#xff0c;用来实现某个功能。Java中&#xff0c;函数又被称为方法。 函数的主要作用是为了提高代码的复用性。 函数都是在栈内存中运行&#xff1b;运行的函数处在栈顶。 函数格式&#xff1a;修饰符 返回…

java函数

函数&#xff08;function&#xff09;&#xff1a; 函数是什么&#xff1f; 函数就是具有名称的特定功能代码的集合。 为什么使用函数&#xff1a; 提高代码的复用度 Java中如何定义函数 访问修饰符 [static] 返回值的类型 函数名称([形式参数列表]) { // 函数体 由一行或者…

函数总结:

–函数是什么&#xff1a; 函数是封装了具备特定功能的一段代码块&#xff0c;具备特定功能的代码集合。 –为什么使用函数&#xff1a; 解决重复性代码问题&#xff0c;提高代码的复用度。–函数基本格式&#xff1a; 访问修饰符 [static] 返回值的类型 函数名称([形式参…

java 基础——函数(方法)

函数基本定义、语法 首先我们先要了解什么是函数&#xff1f; 函数的定义&#xff1a;在类中&#xff0c;有特定功能的一段独立代码块 说人话&#xff1a;简单来说就是&#xff0c;在一个类&#xff08;一个 .java 文件&#xff09;里面&#xff0c;一段有自己存在的意义&am…

云上见!操作系统开源社区重磅发布!

凌云时刻 极鲜速递 导读&#xff1a;2020 云栖大会「系统软件开源及生态专场」聚焦云时代系统软件技术的发展及开源生态面临的机遇和挑战&#xff0c;并将进行操作系统开源社区的重磅发布。 作者 | 阿里云操作系统来源 | 云巅论剑 2020 云栖大会将在 9 月 17 日 — 9 月 18 日…

万字干货:阿里巴巴是怎么做大数据算法应用测试的? | 凌云时刻

凌云时刻 洞见 导读&#xff1a;随着最近几年数据计算力与机器智能算法的兴起&#xff0c;大数据应用在各个行业也不断涌现。测试技术作为工程技术的一部分&#xff0c;也在同步演进。在 DT 时代&#xff0c;如何测试和保障一个基于大数据的应用的软件质量&#xff0c;成为测试…

在中国在行其道的智慧城市,为何折戟多伦多? | 凌云时刻

凌云时刻 洞见 导读&#xff1a;谷歌的母公司Alphabet于2017年开始&#xff0c;致力于将多伦多的Quayside社区改造成未来主义社区&#xff0c;承诺投入超过5000万美元用于使用技术减少交通拥放和垃圾填埋场。但是由于数据隐私问题&#xff0c;该计划迅速引发了争议&#xff0c…

应云而生,原力觉醒——解读云原生基础设施 | 凌云时刻

凌云时刻 极鲜速递 导读&#xff1a;云原生是云计算领域的热点之一。就像 “一千个人眼里有一千个哈姆雷特”&#xff0c;大家对"云原生"的定义也见仁见智。本文将介绍云原生应用架构和生命周期管理的进化方向。 作者 | 易立 来源 | 凌云时刻&#xff08;微信号&…

从架构到代码:软件开发的七个新趋势 | 凌云时刻

凌云时刻 洞见 导读&#xff1a;本文根据阿里云原生团队资深技术专家陈立兵 (花名&#xff1a;雷卷)的直播整理而成&#xff0c;从领域驱动设计&#xff08;DDD&#xff09;、Reactive、Service Mesh和代码智能等几个方面展开&#xff0c;聊一聊他眼里的软件开发的发展趋势。 …

桌面版IDE将迎终结,Github发布代码空间Codespaces | 凌云时刻

凌云时刻 洞见 导读&#xff1a;2020年了&#xff0c;你拿啥写码呢&#xff1f; 作者 | 马超 来源 | 凌云时刻&#xff08;微信号&#xff1a;linuxpk&#xff09; Satellite 2020 5月7日&#xff0c;受疫情的影响&#xff0c;全球最大的开源社区GitHub也采用了线上的方式举办…

开源界也要封闭,OpenSource能否继续无国界 | 凌云时刻

凌云时刻 洞见 导读&#xff1a;开源已经站在了必须做转型的十字路口&#xff0c;问题是后面应该怎么走&#xff1f; 作者 | 马超 来源 | 凌云时刻&#xff08;微信号&#xff1a;linuxpk&#xff09; 写在前面 日前知名的云服务提供商HashiCorp在官网宣布&#xff1a;不允许中…