百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

MySQL高性能注意事项简述(mysql 高性能)

wptr33 2025-05-09 22:06 6 浏览

数据库作为应用开发中必不缺少的基础设施,其性能直接影响应用的整体运行速度。MySQL是目前最广泛使用的关系型数据库之一,对于开发人员写出性能良好的SQL是必备的基本技能之一。下面简单描述下编写SQL的注意事项。

编写高质量的SQL需要从以下几个方面注意,基本原则、表字段注意事项、索引使用注意事项、SQL注意事项。

基本原则

一、尽量不要在数据库里做运算。如果遇到运算尽可能在应用程序层进行计算。

二、控制数据库表数量、控制单表数据量、控制表的字段数。建议单库不要超过四百张表,建议单表字段不要超过五十个,建议单表的数据量不要超过一千万。

三、不要编写大SQL、不要使用大事务。SQL尽量写的简单点拒绝编写大SQL,可以将大SQL拆分成多个小SQL,在应用层聚合。大事务拆分成多个小事务,快速提交。

表字段注意事项

一、选择合适数值字段类型。能用小字段类型的就用小字段类型,如tinyint就比int(1)在表示小数据时合适。

二、能用数字表示就不要用字符。如可以用无符号INT存储IP而不是字符串表示。

三、避免使用NULL字段。原因NULL字段查询优化难,含NULL复合索引失效。

四、少用或拆分TEXT/BLOB字段。字段太大需要更多的空间,性能低下,如需使用拆分到单独表。

五、不要在表字段中存储图片。

索引使用注意事项

一、合理添加索引。索引添加太多会影响更新速度。能够使用复合索引的避免加多个单独索引。

二、字符字段建立前缀索引。

三、不在索引列做运算。索引列做运算会导致索引失效。

四、尽量不使用外建。

SQL类注意事项

一、 SQL语句尽可能简单。大SQL拆分成多个小SQL。

二、事务编写尽量短小。事务即开即用用完立即关闭。

三、尽量不要使用select *。只取需要的列。

四、改写OR为IN或者改写为UNION操作。OR在数据量大的时候性能低于IN。

五、避免NOT、!=、<>、NOT IN、NOT EXISTS、NOT LIKE等查询。

六、避免%前缀模糊查询。

七、能用UNION ALL不要用UNION。

八、GROUP BY中去除排序。自带排序。

九、同类型的字段做比较。字符类和字符类比较,数值类和数值类比较,不要混在一起比较。

十、尽量单表查询,尽量不要多表关联查询。多表关联查询可以拆分成单表查询在应用程序中聚合数据。

十一、复合索引的多列注意最左原则。

上述注意事项能避免很多性能低下的SQL,希望在开发过程中能引起注意。

相关推荐

MySQL合集-innobackupex在线备份及恢复(全量和增量)

Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innob...

MySQL合集-单机容器化

MySQL单机容器化mkdir-p/opt/mysql/{data,etc}cpmy.cnf/opt/mysql/etc#dockersearchmysqldockerpullm...

MySQL合集-小版本升级指南

下载最新的mysqlwgethttps://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz...

Mysql 数据库运维方案

前言...

如果忘记了 WAMP 中本机数据库(MySQL)的密码,该怎么办?

如果忘记了WAMP中本机数据库(MySQL)的密码,可以通过以下步骤来重置:停止MySQL服务:打开WAMP,点击“停止所有服务”,或者右键点击WAMP图标,在菜单中选择“MySQL...

Linux服务器日常巡检脚本分享

Linux系统日常巡检脚本,巡检内容包含了,磁盘,...

在 SpringBoot 中设计一个订单号生成系统,原理,架构与实战

在SpringBoot中设计一个订单号生成系统,原理,架构与实战首先,我得考虑订单号的基本要求。通常订单号需要唯一性,不能重复,否则会出大问题。然后可能还要有一定的可读性,比如包含日期、时间或者业...

K8S官方java客户端之七:patch操作

欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;...

浅谈Kubernetes CRD和Operator的原理和使用方法

总结CRD的全称是CustomResourceDefinition,是Kubernetes为提高可扩展性,让开发者去自定义资源(如Deployment,StatefulSet等)的一种方法....

kubernetes实用操作:kubectl命令行工具使用全面总结

kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作。本节对kubectl的子命令和用法进行详细说明。kubectl用法概述kubectl[command][...

ceph rbd块存储挂载及文件存储建立

cephrbd块存储挂载及文件存储建立一、rbd块存储挂载1创建一个OSDpool...

odps sql中常用的时间处理方法

1、获取当前时间selectgetdate();2、获取昨天(字符串格式)selectto_char(dateadd(getdate(),-1,'dd'),'yyyymmd...

每天一个 Python 库:datetime 模块全攻略,时间操作太丝滑!

在日常开发中,时间处理是绕不开的一块,比如:...

时序异常检测工具:ADTK

1adtk简介智能运维AIOps的数据基本上都是...

又一批长事务,P0故障谁来背锅?

最近几周,发生过多起因为事务问题引起的服务报错。现象为...