加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_沈阳站长网 (https://www.024zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL性能优化指南

发布时间:2022-09-14 15:10:21 所属栏目:MySql教程 来源:
导读:  数据库优化,是一个存在了几十年的问题,更是每一个后端开发者精进路上必须掌握的技能。

  而性能优化的核心,就是抠门。在完成功能的前提下:对于CPU,执行越少的代码,那么所需要的CPU时间就越少,因此程
  数据库优化,是一个存在了几十年的问题,更是每一个后端开发者精进路上必须掌握的技能。
 
  而性能优化的核心,就是抠门。在完成功能的前提下:对于CPU,执行越少的代码,那么所需要的CPU时间就越少,因此程序就会越快; 对于IO,执行越少次数的I/O,阻塞于I/O的时间就会越少;对于网络,传输越少的数据,那么所需要的时间就会越少。
 
  对于MySQL的优化,也是一样的。接下来我们来看看MySQL优化的几个步骤:
 
  首先要找到问题所在
 
  性能测试,重现问题,这是进行性能优化的前提。因此我们需要靠一些工具,例如压测工具、慢查询日志等,定位到问题,知道我们 遇到的问题,然后才能解决问题。如果定位到多个性能问题,那么需要进行一个优先级(性能影响程度)的排序,从影响最大的开始 逐次解决。
 
  常见的性能指标包括:
 
  而常见的测试方式就是,一方面逐步加大查询量(或写入量),另一方面定时收集性能数据mysql数据库优化教程,从而进行观察。理想情况下可以通过图表 的方式进行展示,这样可以快速获得一个直观的数据表示。
 
  此处推荐Prometheus + MySQL Exporter。
 
  数据库缓存
 
  MySQL有对查询进行缓存,但是这要取决于配置是否开启,可以参见 此处
 
  mysql数据库优化教程_c# sql大数据优化教程_mysql库存储教程
 
  The query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0. 注意,MySQL 8.0 移除了此功能。
 
  开启了query cache之后,MySQL会对查询进行缓存,缓存的规则是对输入的SQL进行hash计算,如果下一次的SQL算出来的hash得到 相同结果,那么直接返回结果,而不会再次去查询。
 
  但是此处注意,由于是对SQL进行hash计算,所以只要SQL有一丁点的变动,比如多了一个空格,那么就会计算出一个不同的hash值, 从而不会从缓存中读取结果。此外只要查询语句中有任何不确定的参数,例如函数 NOW() 或者类似的自定义函数、存储函数、用户变量、 临时表,mysql库中的系统表,或者任何包含对列级别权限的表,都不会被缓存。
 
  而另一方便,由于所有的输入都会进行一遍缓存查询,此处也有可能会成为性能瓶颈。
 
  schema设计的好,那么就能省事很多。数据库设计中,有数据库范式和反数据库范式两种极端。通常来说,我们会糅合两种方向,取 一个适中的度。遵循数据库范式的好处有数据库操作会更快、没有重复数据等,而反数据库范式的好处有避免随机IO而加快查询速度等。
 
  一般来说,数据库schema的设计遵循这么几点:
 
  索引设计
 
  在《数据库索引设计与优化》一书中提出了一个非常好的概念:三星索引。我们将会看到如何设计一个三星索引。不过在此之前,我们会 先看看常见的索引类型以及他们的特性。
 
  但同时注意,B-Tree索引也有缺点,那就是遵循最左原则:必须从左往右,而且必须是连续的,不能跳过任何一列mysql数据库优化教程,否则就用不上索引;此外, 范围查询之后的查询,业务发用上索引,也就是说,如果有一个索引 (a, b, c),我们的查询是 WHERE a = 'a' AND b LIKE 'j%' AND c = c, 索引无法用上 c,只能用上 (a, b) 这一部分。
 
  而索引设计则与业务非常相关,但是必须纠正一个错误,那就是我们要先思考一下,一个查询能用上几个索引?答案是一个,当然,MySQL有 引入一个叫做 index merge 的操作,也就是说使用多个索引进行查询,然后对结果进行集合操作得到结果,但是这通常意味着索引没有 设计好。回到上一句开头,我们记住,在好的索引设计的情况下,数据库一次查询是只使用一个索引的。设计好一个索引通常遵循以下原则:
 
  回到开头的问题,什么样的索引是三星索引呢?这三颗星分别是什么呢?
 
  通常来说,第三颗星比较难获得,因为一般业务需要的数据各式各样,不可能把所有数据都加到索引里。但是第一和第二颗星星还是可以争取 一下的。
 
  查询
 
  结合上面的索引设计,数据库查询也有一些常见的优化规则:
 
  硬件优化
 
  除了软件上的优化,如果性能仍然不够,那么就需要提升硬件性能了,这个就不在我们这一篇中来讲述了。
 
  总结
 
  这一篇中我们总结了数据库(MySQL)中进行优化的步骤和注意点,首先我们介绍了步骤,然后介绍了索引的类型,如何设计索引,如何 使用索引,设计出高效高性能的查询。
 

(编辑:我爱制作网_沈阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!