Mysql sql技巧与优化

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.mzph.cn/news/874737.shtml

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

相关文章

AI智能名片微信小程序在品牌战略与私域流量构建中的应用与深度探索

摘要:在数字经济时代,私域流量的价值日益凸显,成为企业和个人实现可持续增长的重要驱动力。品牌,作为私域流量的核心,其稳定性和影响力直接关系到流量的质量与转化效率。AI智能名片微信小程序,作为数字营销…

为什么样本方差(sample variance)的分母是 n-1?

样本均值与样本方差的定义 首先来看一下均值,方差,样本均值与样本方差的定义 总体均值的定义: μ 1 n ∑ i 1 n X i \mu\frac{1}{n}\sum_{i1}^{n} X_i μn1​i1∑n​Xi​ 也就是将总体中所有的样本值加总除以个数,也可以叫做总…

倚天屠龙记高手排名

张无忌:其武功配置堪称无双,乾坤大挪移、完全版九阳神功、太极拳剑,再加上后来习得的降龙十八掌,使他成为当之无愧的武林至尊。九阳神功的内力绵绵不绝,使他连拍一千招降龙十八掌也不觉疲累,其威力甚至超过…

vuepress搭建个人文档

vuepress搭建个人文档 文章目录 vuepress搭建个人文档前言一、VuePress了解二、vuepress-reco主题个人博客搭建三、vuepress博客部署四、vuepress后续补充 总结 vuepress搭建个人文档 所属目录&#xff1a;项目研究创建时间&#xff1a;2024/7/23作者&#xff1a;星云<Xing…

git配置代理

git配置代理 添加全局代理&#xff1a; #我在本地7890端口配置了代理&#xff0c;通过该端口转发&#xff0c;这里转发的地址和端口可根据自己的实际情况进行配置 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7…

Java毕业设计 基于SSM和Vue的跑腿系统小程序

Java毕业设计 基于SSM和Vue的跑腿系统小程序 这篇博文将介绍一个基于SSM框架和Vue开发的跑腿系统微信小程序&#xff0c;适合用于Java毕业设计。 功能介绍 跑腿员 登录 注册 忘记密码 首页 图片轮播 校友动态 校友动态详情 任务 在线接单 任务订单 我的 我的收藏 联系客…

WEB安全-SQL注入

1 需求 SQL注入分类&#xff1a; 根据参数类型&#xff1a;字符型&#xff0c;数字型、搜索型 根据提交方式&#xff1a;POST注入&#xff0c;GET注入&#xff0c;HTTP HEAD注入 根据有无回显&#xff1a;联合注入&#xff0c;报错注入&#xff0c;布尔盲注&#xff0c;延时注入…

栈和队列(C语言)

栈的定义 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;…

Elasticsearch:Golang ECS 日志记录 - zerolog

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。在本教程中&#xff0c;我将详述如何 编码器以 JSON 格式记录日志&#xff0c;并以 ECS 错误格式处理错误字段的记录。 默认情况下&#xff0c;会添加以下字段&…

【算法】深入理解并优化算法:提升软件开发效率与质量

目录 一、算法的基本概念 输入 输出 确定性 有限性 有效性 二、常见算法类型 1. 排序算法 选择排序&#xff08;Selection Sort&#xff09; 插入排序&#xff08;Insertion Sort&#xff09; 快速排序&#xff08;Quick Sort&#xff09; 归并排序&#xff08;Mer…

Langchain核心模块与实战[7]:专业级Prompt工程调教LLM[输入输出接口、提示词模板与例子选择器的协同工程]

Langchain核心模块与实战[7]:专业级Prompt工程调教LLM[输入输出接口、提示词模板与例子选择器的协同工程] 1. 大模型IO接口 任何语言模型应用的核心元素是…模型的输入和输出。LangChain提供了与任何语言模型进行接口交互的基本组件。 提示 prompts : 将模型输入模板化、动态…

云原生周刊:Kubernetes v1.31 中的移除和主要变更|2024.7.22

开源项目 Argo Rollouts Argo Rollouts 是一个 Kubernetes 控制器和一组自定义资源定义&#xff08;CRDs&#xff09;&#xff0c;提供高级部署功能&#xff0c;例如蓝绿部署、金丝雀部署、金丝雀分析、实验以及渐进式交付功能给 Kubernetes。 Argo Rollouts 可选地集成了 I…

MATLAB--文件操作相关指令

文章目录 文件操作相关指令前言 M文件创建MATLAB文件操作指令MATLAB文件流控制 文件操作相关指令 前言 记录一下M文件创建、操作、获取信息等相关资料。   MATLAB的M文件是用来代替MATLAB命令行窗口输入指令的文件。因此所有的MATLAB指令都可以再MATLAB的M文件中调用. M文件…

python 读取excel 并处理被合并单元格的数据

业务需求是 读取excel数据 并按指定规则拼接数据保存到 md文件中 遇到的问题&#xff0c;大量空列和空行 造成读取数据卡住&#xff0c;或者逐行 逐单元格遍历 过慢。&#xff08;例如&#xff1a;实际可用数据 一千 行&#xff0c;ws.max_row 读取到的有效行是十万 &#xff…

Harmony学习(二)------ArkUI(2)

1.主轴对齐方式.justifyContent build() {Column(){Text().width(200).height(100).backgroundColor(Color.Yellow).border({width:2})Text().width(200).height(100).backgroundColor(Color.Yellow).border({width:2}).margin(10)Text().width(200).height(100).backgroundCol…

关于iphone不能下载三方软件

iPhone 不能下载第三方软件的原因主要是因为苹果公司严格控制其应用生态系统&#xff0c;确保所有应用都通过其官方的 App Store 分发。这有几个主要原因&#xff1a; 安全性&#xff1a;苹果公司希望通过这种方式减少恶意软件的传播&#xff0c;保护用户的隐私和数据安全。所…

I can‘t link the chatbot model with react

题意&#xff1a;我无法将聊天机器人模型 chatbot 与React连接起来 问题背景&#xff1a; This is the model from flask import Flask, request, jsonify from flask_cors import CORS import json import nltk import numpy as np import random import pickle from time i…

【javascript】关于js控制滚动的一些注意事项

滚动方式有2种 1、element.scrollIntoView // 假设你有一个元素的ID是element-id const element document.getElementById(element-id); // 滚动到该元素 element.scrollIntoView(); // 如果你想要平滑滚动&#xff0c;可以传递一个选项对象 element.scrollIntoView({ behav…

Windows图形界面(GUI)-MFC-C/C++ - 键鼠操作

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 MFC鼠标 派发流程 鼠标消息(客户区) 鼠标消息(非客户) 坐标处理 客户区 非客户 坐标转换 示例代码 MFC键盘 击键消息 虚拟键代码 键状态 MFC鼠标 派发流程 消息捕获&#…

科研绘图系列:R语言热图(heatmap)

介绍 热图是一种数据可视化技术,通常用于展示数据的分布情况。它通过颜色的变化来表示数据的大小或密度,使得观察者能够直观地理解数据集中的模式和趋势。以下是热图的一些关键特点和应用场景: 数据分布:热图可以显示数据在不同区域的分布情况,比如在地图上显示不同地区的…