mysql数据库的优化,你知道有哪些?(代码片段)

androidstarjack androidstarjack     2022-10-23     306

关键词:

点击上方关注 “终端研发部


 

设为“星标”,和你一起掌握更多数据库知识

来源 | sf.gg/a/1190000018631870

数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷.

1. 优化一览图

2. 优化

笔者将优化分为了两大类,软优化和硬优化,软优化一般是操作数据库即可,而硬优化则是操作服务器硬件及参数设置.

2.1 软优化

2.1.1 查询语句优化

1.首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息. 2.例:

DESC SELECT * FROM `user`

显示:


其中会显示索引和查询数据读取数据条数等信息.

2.1.2 优化子查询

在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高.

2.1.3 使用索引

索引是提高数据库查询速度最重要的方法之一,关于索引可以参高笔者<MySQL数据库索引>一文,介绍比较详细,此处记录使用索引的三大注意事项:

  1. LIKE关键字匹配'%'开头的字符串,不会使用索引.

  2. OR关键字的两个字段必须都是用了索引,该查询才会使用索引.

  3. 使用多列索引必须满足最左匹配.

2.1.4 分解表

对于字段较多的表,如果某些字段使用频率较低,此时应当,将其分离出来从而形成新的表,

2.1.5 中间表

对于将大量连接查询的表可以创建中间表,从而减少在查询时造成的连接耗时.

2.1.6 增加冗余字段

类似于创建中间表,增加冗余也是为了减少连接查询.

2.1.7 分析表,,检查表,优化表

分析表主要是分析表中关键字的分布,检查表主要是检查表中是否存在错误,优化表主要是消除删除或更新造成的表空间浪费.

1. 分析表: 使用 ANALYZE 关键字,如ANALYZE TABLE user;

  1. Op:表示执行的操作.

  2. Msg_type:信息类型,有status,info,note,warning,error.

  3. Msg_text:显示信息.

2. 检查表: 使用 CHECK关键字,如CHECK TABLE user [option]

option 只对MyISAM有效,共五个参数值:

  1. QUICK:不扫描行,不检查错误的连接.

  2. FAST:只检查没有正确关闭的表.

  3. CHANGED:只检查上次检查后被更改的表和没被正确关闭的表.

  4. MEDIUM:扫描行,以验证被删除的连接是有效的,也可以计算各行关键字校验和.

  5. EXTENDED:最全面的的检查,对每行关键字全面查找.

3. 优化表:使用OPTIMIZE关键字,如OPTIMIZE [LOCAL|NO_WRITE_TO_BINLOG] TABLE user;

LOCAL|NO_WRITE_TO_BINLOG都是表示不写入日志.,优化表只对VARCHAR,BLOB和TEXT有效,通过OPTIMIZE TABLE语句可以消除文件碎片,在执行过程中会加上只读锁.

2.2 硬优化

2.2.1 硬件三件套

1.配置多核心和频率高的cpu,多核心可以执行多个线程. 2.配置大内存,提高内存,即可提高缓存区容量,因此能减少磁盘I/O时间,从而提高响应速度. 3.配置高速磁盘或合理分布磁盘:高速磁盘提高I/O,分布磁盘能提高并行操作的能力.

2.2.2 优化数据库参数

优化数据库参数可以提高资源利用率,从而提高MySQL服务器性能.MySQL服务的配置参数都在my.cnf或my.ini,下面列出性能影响较大的几个参数.

  • key_buffer_size:索引缓冲区大小

  • table_cache:能同时打开表的个数

  • query_cache_size和query_cache_type:前者是查询缓冲区大小,后者是前面参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但可以在查询中使用SQL_NO_CACHE表示不要使用缓冲区,2表示在查询中明确指出使用缓冲区才用缓冲区,即SQL_CACHE.

  • sort_buffer_size:排序缓冲区

传送门:更多参数

2.2.3 分库分表

因为数据库压力过大,首先一个问题就是高峰期系统性能可能会降低,因为数据库负载过高对性能会有影响。另外一个,压力过大把你的数据库给搞挂了怎么办?所以此时你必须得对系统做分库分表 + 读写分离,也就是把一个库拆分为多个库,部署在多个数据库服务上,这时作为主库承载写入请求。然后每个主库都挂载至少一个从库,由从库来承载读请求。

2.2.4 缓存集群

如果用户量越来越大,此时你可以不停的加机器,比如说系统层面不停加机器,就可以承载更高的并发请求。然后数据库层面如果写入并发越来越高,就扩容加数据库服务器,通过分库分表是可以支持扩容机器的,如果数据库层面的读并发越来越高,就扩容加更多的从库。但是这里有一个很大的问题:数据库其实本身不是用来承载高并发请求的,所以通常来说,数据库单机每秒承载的并发就在几千的数量级,而且数据库使用的机器都是比较高配置,比较昂贵的机器,成本很高。如果你就是简单的不停的加机器,其实是不对的。所以在高并发架构里通常都有缓存这个环节,缓存系统的设计就是为了承载高并发而生。所以单机承载的并发量都在每秒几万,甚至每秒数十万,对高并发的承载能力比数据库系统要高出一到两个数量级。所以你完全可以根据系统的业务特性,对那种写少读多的请求,引入缓存集群。具体来说,就是在写数据库的时候同时写一份数据到缓存集群里,然后用缓存集群来承载大部分的读请求。这样的话,通过缓存集群,就可以用更少的机器资源承载更高的并发。

结语

一个完整而复杂的高并发系统架构中,一定会包含:各种复杂的自研基础架构系统。各种精妙的架构设计.因此一篇小文顶多具有抛砖引玉的效果,但是数据库优化的思想差不多就这些了.

针对knife4j的总结,无非就是牛逼来形容,切实的解决了swagger ui不够友好的问题,而且还可以集成到其他语言的api项目中,真真切切的需要感谢开发作者提供了这么好的工具供我们使用,小伙伴是不是心动了,赶紧去试试吧!enjoy it!

回复 【idea激活】即可获得idea的激活方式
回复 【Java】获取java相关的视频教程和资料
回复 【SpringCloud】获取SpringCloud相关多的学习资料
回复 【python】获取全套0基础Python知识手册
回复 【2020】获取2020java相关面试题教程
回复 【加群】即可加入终端研发部相关的技术交流群
阅读更多
用 Spring 的 BeanUtils 前,建议你先了解这几个坑!

lazy-mock ,一个生成后端模拟数据的懒人工具

在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!

字节跳动一面:i++ 是线程安全的吗?

一条 SQL 引发的事故,同事直接被开除!!

太扎心!排查阿里云 ECS 的 CPU 居然达100%

一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)


相信自己,没有做不到的,只有想不到的在这里获得的不仅仅是技术!



喜欢就给个“在看”

[react]你知道的react性能优化有哪些方法?(代码片段)

[react]你知道的react性能优化有哪些方法?shouldComponentUpdatePureComponent:ClassComponentReact.Memo:FunctionComponentuseCallback:MemoizedFunctionuseMemo:MemoziedValue 个人简介我是歌谣,欢迎和大家一起交流前后端知识。放弃... 查看详情

关于数据库优化你知道多少?(代码片段)

文章目录什么是数据库优化?优化MySQL的查询使用索引:优化子查询:优化MySQL的插入MyISAM引擎InnoDB引擎海量数据处理优化表中包含几千万条数据该怎么办?MySQL的慢查询优化慢查询概念开启慢查询日志:分析... 查看详情

mysql)((代码片段)

Mysql数据库的三范式是什么数据库引擎有哪些InnoDB与MyISAM的区别如何选择引擎?数据库的事务索引问题SQL优化简单说一说drop、delete与truncate的区别什么是视图什么是内联接、左外联接、右外联接?并发事务带来哪些问题?... 查看详情

mysql)((代码片段)

Mysql数据库的三范式是什么数据库引擎有哪些InnoDB与MyISAM的区别如何选择引擎?数据库的事务索引问题SQL优化简单说一说drop、delete与truncate的区别什么是视图什么是内联接、左外联接、右外联接?并发事务带来哪些问题?... 查看详情

mysql的explain分析sql语句(代码片段)

explain分析查询使用 EXPLAIN 关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。通过explain命令可以得到: 表的读取顺序 数据读取操... 查看详情

mysql优化策略(代码片段)

从哪些维度进行MySQL性能优化?所谓的性能优化,一般针对的是MySQL查询的优化。既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进行优化。查询操作需要经历的基本环节&#x... 查看详情

mysql优化策略(代码片段)

从哪些维度进行MySQL性能优化?所谓的性能优化,一般针对的是MySQL查询的优化。既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进行优化。查询操作需要经历的基本环节&#x... 查看详情

面试官问:mysql锁与事物隔离级别你知道吗?(代码片段)

 前言 前面我们讲了MySQL数据库底层的数据结构与算法、MySQL性能优化篇一些内容。我们再来聊聊MySQL的锁与事务隔离级别,分上下两篇,本篇重点讲MySQL的行锁与事务隔离级别。锁定义锁是计算机协调多个进程或线程并发... 查看详情

mysql15个有用的mysql/mariadb性能调整和优化技巧(代码片段)

MySQL是一个强大的开源关系数据库管理系统(简称RDBMS)。它发布于1995年(20年前)。它采用结构化查询语言(SQL),这可能是数据库内容管理中最流行的选择。最新的MySQL版本是5.6.25,于2015年5月29日发布。关于MySQL一个有趣的事... 查看详情

mysql优化策略(代码片段)

从哪些维度进行MySQL性能优化?所谓的性能优化,一般针对的是MySQL查询的优化。既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进行优化。查询操作需要经历的基本环节&#x... 查看详情

浅谈mybatis分页开发,你知道有哪些实现方式呢?(代码片段)

分页查询:就是将数据库查询的结果在有限的界面上分好多页显示,分页是许多网站的常用功能,也是最基本的功能。为什么要分页?减少数据的处理量 下面用例子演示说明实现分页查询的两种方式:方式一... 查看详情

mysql优化总结(代码片段)

...,应该是各部门协同参与的工作,任何单一部门都不能对数据库进行优化。所有优化工作,是由业务需要驱使的。3、优化由谁参与在进行数据库优化时,应该由DBA、业务部门代表、应用程序设计人员、应用程序开发人员、运维... 查看详情

mysql面试题全在这里了(上)(代码片段)

目录1、数据库存储引擎2、InnoDB(B+树)2、TokuDB(FractalTree-节点带数据)3、MyIASM4、Memory5、数据库引擎有哪些6、InnoDB与MyISAM的区别7、索引8、常见索引原则有9、数据库的三范式是什么10、第一范式(1stNF-列都是不可再分)11、第二... 查看详情

mysql面试题全在这里了(上)(代码片段)

目录1、数据库存储引擎2、InnoDB(B+树)2、TokuDB(FractalTree-节点带数据)3、MyIASM4、Memory5、数据库引擎有哪些6、InnoDB与MyISAM的区别7、索引8、常见索引原则有9、数据库的三范式是什么10、第一范式(1stNF-列都是不可再分)11、第二... 查看详情

盘点mysql的八大日志,你知道哪些?

...。MySQL也不例外,也会记录各种各样的日志信息。那么你知道MySQL都有哪些日志吗?每种日志的作用是干吗吗?redolog日志介绍重做日志(​​redolog​​)是​​InnoDB​​存储引擎生成的日志,记录的是"物理级别"上的页修改操作,... 查看详情

「offer来了」快来关注这些性能优化问题(代码片段)

「面试专栏」前端面试之性能优化篇💬序言💯思维导图抢先看👁️‍🗨️一、html、css、js、jq优化1、针对HTML,如何优化性能?2、针对CSS,如何优化性能?3、哪些方法能提升移动端CSS3动画体验&#x... 查看详情

「offer来了」快来关注这些性能优化问题(代码片段)

「面试专栏」前端面试之性能优化篇💬序言💯思维导图抢先看👁️‍🗨️一、html、css、js、jq优化1、针对HTML,如何优化性能?2、针对CSS,如何优化性能?3、哪些方法能提升移动端CSS3动画体验&#x... 查看详情

mysql有多少文件你知道吗?(代码片段)

MySQL里面的文件多且杂,与我们业务开发相关的也不多,但是对MySQL的整体理解还是需要懂这些知识点,当遇到问题或需要对MySQL做调优时间可以找到对应的切入点.本文对各种常见的MySQL文件做知识点总结,方便以后可以及时查阅复盘... 查看详情