sql性能优化精华总结

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: sql性能优化精华总结explain在性能分析上有很大的作用id:包含一组数字,表示查询中执行select子句或操作表的顺序,id相同,执行顺序由上至下,id越大优先级越高,越先被执行select_type: 常见几个simple:表示简单的select,没有union和子查询primary:有...

sql性能优化精华总结
explain在性能分析上有很大的作用

id:包含一组数字,表示查询中执行select子句或操作表的顺序,id相同,执行顺序由上至下,id越大优先级越高,越先被执行
select_type: 常见几个
simple:表示简单的select,没有union和子查询
primary:有子查询,最外面的select查询就是primary
union:union中的第二个或随后的select查询,不依赖外部查询结果
dependent union:union中的第二个或随后的select查询,依赖外部查询结果
table: 当前表名
type: system(表仅有一行(=系统表),这是const连接类型的一个特例),const(常量查询),ref(非唯一索引访问,只有普通索引),eq_ref(主键或唯一索引),range(索引的范围查询),index(根据索引查询全表),all(全表扫描,通常没有建索引的列)
效率:system>const>eq_ref>ref>range>index>all
possible_keys: 表中可能帮助查询的索引
key: 选择使用的索引
key_len: 使用的索引长度(在不损失精度的情况下越短越好)
rows: 扫描的行数,越大越不好
filtered: 表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数
extra: 了解几个
using temporary:组合查询返回的数据量太大需要建立临时表存储数据,出现这个sql应该优化
using where:使用where查询条件
using index:使用覆盖索引,不需要回表查询
using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”,使用文件排序,使用非索引列进行排序时出现,非常消耗性能,尽量优化
如果知道查询结果只有一条,那么sql语句中使用limit 1会提高查询效率,避免全表扫描
避免在复杂查询里使用like ‘%parm%’,以%开头的模糊查询都会导致索引失效,而’param’和’param%'还是会使用索引
如果不是业务必须,建议使用union all代替union,因为union需要进行排重,效率低。对于一些单纯使用分表来提高效率的查询,完全可以使用union all
尽量用join代替子查询,虽然join性能并不佳,但和mysql子查询比起来还是有非常大的性能优势,因为连接查询不需要建立临时表,其速度比子查询快
尽量避免使用!=或<>操作符,引擎将放弃使用索引而进行全表扫描,可以考虑改为范围查询解决
尽量避免使用or来连接条件,引擎将放弃使用索引而进行全表扫描,如可使用(or查询现在的mysql版本好像也走索引)
select id from table1 where name='zhangsan'
union all
select id from table1 where name='lisi'

替代

select id from table1 where name='zhangsan' or name='lisi'

尽量避免使用in和not in,引擎将放弃使用索引而进行全表扫描,对于连续数值,能用between就不要使用in(in查询现在的mysql版本好像也走索引)
尽量避免使用select *查询
区分in和exist
select * from table1 where id in (select id from table2)

等价于

select from table1 where exists(select from table2 where table2.id=table1.id)

exists以外表为驱动,先被访问,in以内表为驱动。exists适合外表小而内表大,in适合外表大而内表小
在in和exists通用的情况下使用exists,因为in不走索引

用where字句替换HAVING字句,因为having只会检索出所有记录之后才对结果集进行过滤
尽量不要有空判断的语句,这将导致全表扫描而不是索引扫描,一般为经常null判断的列增加默认值
索引列上有函数处理,将导致不走索引
隐式转换导致不走索引
mysql组合索引遵循“最左前缀”的原则,组合索引中第一列必须出现在查询条件中,组合索引才有效
尽量使用数字型字段,尽可能使用varchar/nvarchar代替char/nchar,这样节省存储空间,提升检索效率。
根据需要建立多列联合索引
根据业务场景建立覆盖索引只查询业务需要的字段
多表连接字段上需要建立索引
where条件字段上需要建立索引
排序字段建立索引

分组字段建立索引

作者:shuangyueliao
来源:CSDN
原文:https://blog.csdn.net/shuangyueliao/article/details/89512894
版权声明:本文为博主原创文章,转载请附上博文链接!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
MYSQL-SQL语句性能优化策略以及面试题
MYSQL-SQL语句性能优化策略以及面试题
141 1
|
5月前
|
SQL 缓存 监控
14个Flink SQL性能优化实践分享
【7月更文挑战第12天】 1. **合理设置并行度**: 根据数据量和资源调整以提高处理速度. 2. **优化数据源**: 使用分区表并进行预处理减少输入量. 3. **数据缓存**: 采用 `BROADCAST` 或 `REPARTITION` 缓存常用数据. 4. **索引和分区**: 创建索引并按常用字段分区. 5. **避免不必要的计算**: 检查并移除多余的计算步骤. 6. **调整内存配置**: 分配足够内存避免性能下降. 7. **优化连接操作**: 选择适合大表和小表的连接方式. 8. **数据类型优化**: 选择合适类型以节省资源. ........
125 1
|
3月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
564 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
2月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
2月前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
4月前
|
SQL 存储 数据库
|
4月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
61 0
|
4月前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
73 0
|
5月前
|
SQL 存储 数据库
MySQL设计规约问题之性能分析工具如Sql explain、show profile和mysqlsla在数据库性能优化中有什么作用
MySQL设计规约问题之性能分析工具如Sql explain、show profile和mysqlsla在数据库性能优化中有什么作用
|
5月前
|
SQL 索引
性能优化思路及常用工具及手段问题之索引不合理导致的SQL执行效率低问题如何解决
性能优化思路及常用工具及手段问题之索引不合理导致的SQL执行效率低问题如何解决
下一篇
无影云桌面