首页 > 数据库 >MySQL高性能优化规范建议总结

MySQL高性能优化规范建议总结

时间:2024-01-05 14:37:03浏览次数:39  
标签:存储 ENUM MySQL 查询 索引 高性能 使用 优化 SELECT

1、优先选择符合存储需要的最小的数据类型,因为存储字节越小,占用也就空间越小,性能也越好。 a.某些字符串可以转换成数字类型存储比如可以将 IP 地址转换成整型数据。 b.对于非负型的数据 (如自增 ID,整型 IP,年龄) 来说,要优先使用无符号整型来存储。
c.小数值类型(比如年龄、状态表示如 0/1)优先使用 TINYINT 类型。
  2、a. 建议把 BLOB 或是 TEXT 列分离到单独的扩展表中。
如果一定要使用,建议把 BLOB 或是 TEXT 列分离到单独的扩展表中,查询时一定不要使用 select *而只需要取出必要的列,不需要 TEXT 列的数据时不要对该列进行查询。
TEXT 或 BLOB 类型只能使用前缀索引
  3、避免使用 ENUM 类型

  • 修改 ENUM 值需要使用 ALTER 语句;
  • ENUM 类型的 ORDER BY 操作效率低,需要额外操作;
  • ENUM 数据类型存在一些限制比如建议不要使用数值作为 ENUM 的枚举值。
  4、使用 TIMESTAMP(4 个字节) 或 DATETIME 类型 (8 个字节) 存储时间

经常会有人用字符串存储日期型的数据(不正确的做法)

  • 缺点 1:无法用日期函数进行计算和比较
  • 缺点 2:用字符串存储日期要占用更多的空间
  5、限制每张表上的索引数量,建议单张表索引不超过 5 个 索引并不是越多越好!索引可以提高效率同样可以降低效率。 索引可以增加查询效率,但同样也会降低插入和更新的效率,甚至有些情况下会降低查询效率。 因为 MySQL 优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加 MySQL 优化器生成执行计划的时间,同样会降低查询性能。   6、如何选择索引列的顺序 建立索引的目的是:希望通过索引进行数据查找,减少随机 IO,增加查询性能 ,索引能过滤出越少的数据,则从磁盘中读入的数据也就越少。
  • 区分度最高的放在联合索引的最左侧(区分度=列中不同值的数量/列的总行数)
  • 尽量把字段长度小的列放在联合索引的最左侧(因为字段长度越小,一页能存储的数据量越大,IO 性能也就越好)
  • 使用最频繁的列放到联合索引的左侧(这样可以比较少的建立一些索引)
  7、禁止使用 SELECT * 必须使用 SELECT <字段列表> 查询
  • SELECT * 消耗更多的 CPU 和 IO 以网络带宽资源
  • SELECT * 无法使用覆盖索引
  • SELECT <字段列表> 可减少表结构变更带来的影响
  8、避免使用子查询,可以把子查询优化为 join 操作 通常子查询在 in 子句中,且子查询中为简单 SQL(不包含 union、group by、order by、limit 从句) 时,才可以把子查询转化为关联查询进行优化。 子查询性能差的原因: 子查询的结果集无法使用索引,通常子查询的结果集会被存储到临时表中,不论是内存临时表还是磁盘临时表都不会存在索引,所以查询性能会受到一定的影响。特别是对于返回结果集比较大的子查询,其对查询性能的影响也就越大。由于子查询会产生大量的临时表也没有索引,所以会消耗过多的 CPU 和 IO 资源,产生大量的慢查询。   9、对应同一列进行 or 判断时,使用 in 代替 or in 的值不要超过 500 个,in 操作可以更有效的利用索引,or 大多数情况下很少能利用到索引。   10、WHERE 从句中禁止对列进行函数转换和计算 对列进行函数转换或计算时会导致无法使用索引

标签:存储,ENUM,MySQL,查询,索引,高性能,使用,优化,SELECT
From: https://www.cnblogs.com/lengsong/p/17947194

相关文章

  • MySQL三大日志,mvcc、DateTime 类型等
    1、MySQL事务隔离级别详解解决幻读的方法解决幻读的方式有很多,但是它们的核心思想就是一个事务在操作某张表数据的时候,另外一个事务不允许新增或者删除这张表中的数据了。解决幻读的方式主要有以下几种:将事务隔离级别调整为 SERIALIZABLE 。在可重复读的事务级别下,给事务操......
  • 模型加速与推理优化:在边缘设备上的挑战
    1.背景介绍人工智能(AI)技术的发展取决于模型的性能和效率。随着数据量的增加和计算需求的提高,传统的计算机学习方法已经无法满足需求。为了实现高性能和高效率的模型,我们需要进行模型加速和推理优化。在边缘设备上进行模型加速和推理优化具有以下优势:降低计算成本:边缘设备可以在本地......
  • Go语言中的HTTP服务器性能优化
    在当今的互联网时代,高性能的HTTP服务器是至关重要的。Go语言,以其并发特性和简洁的语法,成为了构建高效服务器的理想选择。本文将探讨如何优化Go语言中的HTTP服务器性能。首先,让我们理解性能优化的重要性。随着Web应用的复杂性和数据量的增长,对服务器的要求也越来越高。延迟、吞吐量......
  • 解决Django Elastic Beanstalk与RDS MySQL连接问题
    根据错误消息,问题在于您的ElasticBeanstalk环境中缺少MySQL配置。这可能是由于缺少所需的软件包或依赖项导致的。解决此问题的步骤如下:在您的项目根目录中创建一个名为.ebextensions的文件夹。在.ebextensions文件夹中创建一个名为packages.config的文件,并在其......
  • MySQL 8.0的SQL查询JSON返回的数据类型为字符串而非数组
    在MySQL8.0中,SQL查询JSON返回的数据类型确实是字符串,而不是数组。这是因为MySQL将JSON数据存储为字符串,并提供了一些函数和操作符来处理JSON数据。但是,你可以使用内置的JSON函数来处理返回的JSON字符串。例如,你可以使用JSON_EXTRACT函数来提取JSON字符串......
  • Docker下MySQL 8.0如何通过xtrabackup进行增量备份
    看到网上很多Docker环境下MySQL8.0的xtrabackup都是通过dockercompose的方式来进行备份的,个人觉得太麻烦了,于是通过修改MySQLDocker镜像的方式来扩展备份功能第一部分 MySQL8.0功能扩展1.MySQL8.0官方镜像扩展xtrabackup,Dockerfile如下FROMdocker.io/mysql:8.0.34-oracleR......
  • 大数据处理:高性能计算在数据挑战中的应用
    1.背景介绍大数据处理是指利用计算机科学和应用技术来处理和分析大规模、高速、多源、不确定性和复杂性高的数据集。大数据处理的核心挑战是如何在有限的时间和资源内,高效地处理和分析这些复杂的数据。高性能计算(HighPerformanceComputing,HPC)是一种计算机科学技术,旨在解决那些......
  • MySQL 数据库归档工具pt-archive 与归档数据的安全存储 与 为什么每次归档都少数...
    DBA在日常的工作中,数据归档是DB人员工作中的必选项。这里有技术的因素和法律的因素,数据库中的业务在使用一段时间内,数据表中必然存在大量的过期的数据,这些数据将不在与当前的业务有关,同时这些数据的存在会影响当前一些SQL的执行的性能,所以从技术的角度需要进行数据的归档。从法......
  • 2038年MySQL5.7和MariaDB 10.6自动终止服务进程。MySQL 8.0.31未受影响。
    2038年MySQL5.7和MariaDB10.6自动终止服务进程。MySQL8.0.31未受影响。14年内,必须升级MySQL5.7数据库,重要的事情说三遍。见下面截图[Warning]Currenttimehasgotpastyear2038.Validatingcurrenttimewith5iterationsbeforeinitiatingthenormalservershutdownpr......
  • mysql8.0存储过程和存储函数的查看、修改、删除
    5、存储过程和存储函数的查看、修改、删除5.1、查看创建完之后,怎么知道我们创建的存储过程、存储函数是否成功了呢?MySQL存储了存储过程和函数的状态信息,用户可以使用SHOWSTATUS语句或SHOWCREATE语句来查看,也可直接从系统的information_schema数据库中查询。这里介绍3种方法。......