Mysql sql技巧与优化

news2024/9/20 16:31:07

1、解决mysql同时更新、查询问题

在这里插入图片描述

2、控制查询优化 hint

在这里插入图片描述

3、 优化 特定类型的查

优化 COUNT() 查询

在这里插入图片描述
使用 近似值
业务能接受近似值的话,使用explain拿到近似值

在这里插入图片描述

优化关联查询

在这里插入图片描述

优化子查询

在这里插入图片描述

4、优化group by和distinct

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优化GROUP BY WITH ROLLUP

在这里插入图片描述

在这里插入图片描述

5、优化 limit分页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他优化法办 包括还 使用预先计算的汇总表,或关联者 到一个冗余表,冗余表只包含主键列和需要做排序数据。

6、优化SQL_CALC_FOUND_ROWS

在这里插入图片描述
说明

  • SQL_CALC_FOUND_ROWS 会告诉 MySQL 在执行 SELECT 查询时计算总行数,而不管 LIMIT 子句。
  • FOUND_ROWS() 函数会返回上一个 SELECT
  • SQL_CALC_FOUND_ROWS 查询的总行数。

注意事项

  • SQL_CALC_FOUND_ROWS 在大表或复杂查询中可能会导致性能问题,因为它会强制 MySQL 计算总行数。
  • 使用 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 的组合可能会被替代方案所取代,例如先执行 COUNT(*) 查询,然后再执行带 LIMIT 的查询,这样可能会更高效。

7、优化 UNION 查询

在这里插入图片描述

8、静态查询分析

在这里插入图片描述

9、如何判断sql较优 explain

在这里插入图片描述
如上图所示,用户可以通过Explain判断语句是否已最优,其中Type与Extra的主要类型与含义如下:

Type

1)ALL:Full Table Scan 全表扫描;
2)index: Full Index Scan,索引扫描;
3)range:索引范围扫描;
4)ref: 表示非唯一索引 连接匹配条件;
5)eq_ref: 类似ref,区别就在使用的索引是唯一索引;

用法:当一个表有一个唯一索引,并且该索引中的所有字段都被用于连接条件时,会使用eq_ref。

SELECT * FROM orders
JOIN customers ON orders.customer_id = customers.customer_id;

在这个例子中,如果customers.customer_id是一个唯一键或主键,并且在orders.customer_id上有索引,那么可能会使用eq_ref访问方法

6)const: 常量查询,比如pk等值;
用法:当表中有一个主键或唯一索引,并且查询条件使用了常量值时,会使用const。

SELECT * FROM customers WHERE customer_id = 1;

在这个例子中,如果customer_id是主键或唯一索引,那么可能会使用const访问方法。

7)system是Const类型的特例;当查询的表只有一行的情况下,使用system。

从性能角度来看,从上往下性能越来越高,一般要求是到Range范围扫描。

Extra

1)Using filesort 排序;
表示查询需要进行文件排序。通常在 ORDER BY 子句中未使用索引时会出现。这通常是一个性能问题的信号,因为文件排序可能比较耗时。

2)Using index 使用索引可以返回请求列
3)Using index condition 通过索引初步过滤;回表再过滤其它条件;
4)Using temporary 临时表;
表示查询需要使用临时表来存储中间结果。通常在涉及 GROUP BY、ORDER BY 或者某些复杂的查询时会出现。

5)Using where 单独出现时;一般代表表上出现全表扫描过滤;
6)Using index & Using where 使用索引返回数据;同时通过索引过滤。

Extra反映了执行计划的真实执行情况。

在这里插入图片描述

结合上图执行计划分析,C表是外部驱动表,索引方式为idx_pk,Type是Range,Extra有Using index condition、Using where以及Using MRR,
表示进行全表扫描,通过索引初步过滤,回表B再过滤其他条件。B表是从外表取数据做内循环,索引方式为i_text,扫描的列为c.b.KeyNo,这种情况说明这个执行计划相对完善。

10、sql优化建议

禁止项

1)select *,返回无用数据,过多IO消耗,以及Schema 变更问题;
2)Insert语句指定具体字段名称,不要写成insert into t1 values(…),道理同上;
3)禁止不带WHERE,导致全表扫描以及误操作;
4)Where条件里等号左右字段类型必须一致,否则可能 会产生隐式转换,无法利用索引;
5)索引列不要使用函数或表达式,否则无法利用索引。
如where length(name)=‘Admin’或where user_id+2=5;
6)Replace into,会导致主备不一致;
7)业务语句中带有DDL操作,特别是Truncate。

建议项

1)减小三表以上Join;
2)用Union all 替代Union;
3)使用Join 替代子查询;
4)不要使用 like ‘%abc%’,可以使用 like ‘abc%’;
5)Order by /distinct /group by 都可以利用索引有序性;
6)减少使用event/存储过程,通过业务逻辑实现;
7)减小where in() 条件数据量;
8)减少过于复杂的查询和拼串写法。

11、mysql整体注意事项

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL-19】一文带你了解存储函数

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

Richteck立锜科技电源管理芯片简介及器件选择指南

一、电源管理简介 电源管理组件的选择和应用本身的电源输入和输出条件是高度关联的。 输入电源是交流或直流?需求的输出电压比输入电压高或是低?负载电流多大?系统是否对噪讯非常敏感?也许系统需要的是恒流而不是稳压 (例如 LED…

应届生软件测试面经_一名应届生的软件测试面试题目

1.你为什么选择软件测试行业 因为之前有了解软件测试这个行业,觉得他的发展前景很好, 2.根据你以前的项目经验描述一下软件开发、测试过程,由那些角色负责,你做什么 要有架构师、开发经理、测试经理、程序员、测试员。我在里面…

什么是死锁 , 以及产生的原因详细介绍

死锁 一. 什么是死锁 指的是两个或者两个以上的线程在执行的过程中由于竞争同步锁而产生的一种阻塞现象;如果没有外力的作用,他们将无法继续执行下去,这种情况称之为死锁, 通俗的说死锁产生的原因主要是由于线程的相互等待 , 导致程序无法进行下去 二. 代码阐述 这里我们写…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道,至少可以锻炼一下中文写作,或者写一些科研方向的简单综述性文章。当然,如果你的老师期末要求也是交一份科技论文在线的刊载证明的话,这篇文章可以给你提供一些经验。 中国科技论…

数据结构 - 队列(精简介绍)

文章目录 单端队列单端队列操作:Queue实现 双端队列双端队列操作:Deque实现 循环队列循环队列手动实现 优先级队列Q 不断取最大礼物并开方 单端队列 普通队列为单端队列,先进先出(FIFO) 只能从尾部插入,头…

jscolor 赋值input 没能引起前边色框的颜色变化

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

操作系统内核源码杂谈篇:临界区

临界资源,是指同一时刻只能由一个线程(linux下为进程)访问的资源,而临界区就是为了确保临界资源访问是单一数据流。 临界区的代码执行,也就是进行原子操作,不会被打断。 先分析RTOS的运行架构&#xff0c…

35道最新【软件测试】面试题,常见面试题及答案汇总

前言 除了掌握扎实的专业技能之外,你还需要一份《软件测试面试宝典2024版》才能在万千面试者中杀出重围,成功拿下offer。 小编特意整理了35道测试必问必过面试题,送给大家,希望大家都能顺利通过面试,拿下高薪。赶紧码…

ngnix添加自定义模块

参考如下的 示例: hello handler 模块 部分, handler模块(100%) — Nginx开发从入门到精通 参考: 【Nginx】Nginx新增自定义模块_nginx 自定义模块-CSDN博客 需要详细说明的是, 创建一个addtion_module文件夹,将.c文件放进去&…

应急靶场(6):Linux1

目录 黑客的IP地址遗留下的三个flag 第一个flag第二个flag第三个flag 下载好靶场(应急响应靶机-Linux(1))并搭建好环境,使用帐号密码(defend / defend)登录靶机,然后使用su root命令和帐号密码(…

为hugo博客添加isso评论

个人博客评论诉求 能简单的在页面看到评论即可 能找到评论人的邮箱评论可以折叠能私有化部署 之前用过twikoo,个人体验没有isso丝滑简洁 私有化安装isso 官网 https://isso-comments.de/https://github.com/isso-comments/isso 部署方法 服务端安装python, pip 通过以下命…

“社群+”生态下的开源AI智能名片源码:驱动商业与社会连接的新引擎

摘要:在“社群”生态日益成为主流趋势的今天,开源AI智能名片源码作为技术创新与社群运营的深度融合体,正逐步展现出其重塑商业格局、深化社会连接的巨大潜力。本文旨在深入探讨开源AI智能名片源码的技术特性、在“社群”生态中的具体应用、对…

C/C++ yaml 库

文章目录 一、yaml 介绍1.1 yaml 介绍1.2 yaml 教程1.3 yaml 在线工具1.4 yaml 出现背景 二、C/C yaml 库选型2.2 libfyaml2.3 yaml-cpp 一、yaml 介绍 1.1 yaml 介绍 YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,通…

在安卓手机上原生运行docker

前言 之前的文章(香橙派5plus上跑云手机方案一 redroid(带硬件加速))在Ubuntu的docker里运行安卓,这里说下怎么在安卓手机下运行docker,测试也可以跑Ubuntu。 想在手机上运行docker想的不是一天两天了,其实很久之前就有这个想法了&#xff…

12款超实用的视频压缩软件,帮你一键压缩视频

视频压缩软件这么多,我们该怎样正确使用它们并高效地压缩视频大小呢?数字化时代,高清画面的视频往往意味着更大的视频文件大小,它们往往会影响电脑占用内存、视频传输速度。本文将为您提供12款视频压缩技巧,帮您轻松将…

智能化革新:数字装备场的移动信息终端实战攻略!

智慧营区发展项目在数字化装备管理领域取得了显著进展,得益于物联网、大数据和人工智能等先进技术的融合应用,极大地增强了装备场所硬件之间的互动性和协同作业能力。 此外,该系统亦提供了定制化的在线业务流程管理服务,使得管理活…

小白新手搭建个人网盘

小白新手搭建个人网盘 序云服务器ECS重置密码远程连接ECS实例 安装OwnCloud安装Apache服务PHP运行环境NAS挂载挂载验证操作体验 序 阿里云文件存储NAS(Apsara File Storage NAS)是一个可大规模共享访问,弹性扩展的分布式文件系统。本文主要是…

3.4、matlab实现SGM/BM/SAD立体匹配算法计算视差图

1、matlab实现SGM/BM/SAD立体匹配算法计算视差图简介 SGM(Semi-Global Matching)、BM(Block Matching)和SAD(Sum of Absolute Differences)都是用于计算立体匹配(Stereo Matching)的…

什么是上网行为审计系统?有哪些功能?一文全搞定!

员工A(好奇地):“嘿,你听说了吗?公司最近要安装上网行为审计系统,说是要监控我们的上网行为。” 员工B(惊讶地):“真的吗?那岂不是很没有隐私?”…