Mysql SQL优化方法

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Mysql SQL优化方法 1.单库表别太多,一般保持在200以下为宜. 2.尽量避免SQL中出现运算,例如select a+5 from A,让DB功能单一化 3.表设计尽量小而精,能用5个字段就不要用6个(除非业务上使用增加冗余字段来提升性能)。

Mysql SQL优化方法

1.单库表别太多,一般保持在200以下为宜.

2.尽量避免SQL中出现运算,例如select a+5 from A,让DB功能单一化

3.表设计尽量小而精,能用5个字段就不要用6个(除非业务上使用增加冗余字段来提升性能)。

4.SQL事务不能设计太大,比如一次性提交10W条insert,当然这个不仅仅是性能问题了,可能直接内存溢出了。

一般来说insert事务的话,5K-1W来做批处理就可以了(字段不能太大)

5.设计表的时候尽量用”小数据类型”,比如尽量避免textblob等这些大家伙,优先使用ENUM和SET(小而美,范围有限,百益无一害)

6.设计表字段能用数字类型就千万别用字符类型,比如存IP地址,用int,别用varchar(方法自己百度一下吧)。

7.尽量避免null字段,定义时尽量使用 not null。原因是允许null时不方便查询优化,复合索引也会失效,而且如果列有索引时会额外占用空间: a int(10) NOT NULL DEFAULT 0

8.图片等大家伙不要存DB,用FastDFS等中间件或者直接使用七牛等云存储。

9.大SQL尽量拆分,多核CPU每个CPU只能执行一个SQL,所以并发时,一堆小的可能效率更高一些,并且容易命中缓存,而且不容易长时间锁表(无论什么锁都是时间越短越好),当然这个要结合实际情况分析了,一大堆小的万一增加IO负担呢。

10.事务尽可能的小,代码别偷懒,全加到一个transaction中,尽量使用多个transaction

11.存储过程,触发器之类的能避就全避免了吧,维护不方便,人员变动时,很多时候就忘了,时间一长全是定时炸弹。

12.禁止select *需要啥就取啥。

13.update时,where语句尽量要走索引,不然会全表扫描,一般情况下,1G的数据至少10S(想想这可是update啊,锁住10S意味着啥)。

14.or尽量不用,改为in(),当然in的范围太多也不行,尽量别超100。

15.还是or,如果:select a from A where b=1 or c=1这种where里面不同字段进行or,这种尽量改为union

select a from A where b=1
union
select a from A where c=1
  • 1
  • 2
  • 3

16.避免 “% 前缀”模糊查询 。因为会导致索引失效,大数据量下是灾难。

17.分页时:Select a from A limit 10000,10;这种大偏移量下效率非常低。可以考虑如下几个方案:

select a from A WHERE id>=xxxx limit 11;
(将上一页的最大值通过where id> 进行预处理,然后分页)
  • 1
  • 2
select a from A WHERE id >= ( select a from A limit 10000,1 ) limit 10;
  • 1
select a from A inner join (select a from A limit 10000,10) using (id) ;
  • 1

18.避免使用count(*),不知道为什么mysql优化这么个东西有那么难么,但是实际上大数量下这个东西真心慢,1000W以上至少几秒,作为替代方案,考虑使用nosql例如redismemcached存下来,但是要定时校对。

还有一个办法,直接做一个表存下来,每次增加或者减少都在这个表做update增减。

19.UNION ALL而非 UNION ,看需要啦,一般不用去重的业务的话去重压力不小,能省则省。

20.尽量不用 INSERT SELECT,数据量大有延迟,同步完了可能有错误。

原文地址 https://blog.csdn.net/jeikerxiao/article/details/81744271
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
关系型数据库 MySQL 测试技术
MySQL的`IN`的优化经验
限制IN列表的长度:IN子句中的元素数量较多时,会显著降低查询性能。尽量减少IN中的项数量。
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
20 6
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
|
5天前
|
SQL 存储 关系型数据库
【MySQL系列笔记】SQL优化
SQL优化是通过调整数据库查询、索引、表结构和配置参数等方式,提高SQL查询性能和效率的过程。它旨在减少查询执行时间、减少系统资源消耗,从而提升数据库系统整体性能。优化方法包括索引优化、查询重写、表分区、适当选择和调整数据库引擎等。
27 3
|
7天前
|
SQL 关系型数据库 MySQL
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
|
7天前
|
缓存 关系型数据库 MySQL
mysql用in查询大量数据的方法
在MySQL中使用 IN 子句来查询大量数据时,性能可能会成为一个问题
|
20小时前
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
|
1天前
|
SQL 缓存 关系型数据库
MySQL常见问题解决和自动化安装脚本
这篇内容包含了两个主要部分:解决MySQL登录问题和处理GPG密钥问题。当MySQL密码正确但无法登录时,可以通过执行SQL命令`ALTER USER`和`flush privileges`来修改和重置密码。对于MySQL安装时的GPG密钥错误,首先需要强制删除旧的MySQL仓库包,导入新的GPG公钥,然后安装MySQL服务器。如果遇到GPG检查错误,可以使用`--nogpgcheck`参数忽略检查来安装。最后,提供了一个自动化安装MySQL的脚本,用于检查旧版本、卸载残留、安装MySQL8并启动服务。
12 1
MySQL常见问题解决和自动化安装脚本
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
|
5天前
|
关系型数据库 MySQL Linux
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】