【SQL】MySQL中的SQL优化、explain执行计划

news2024/11/16 18:44:50
  • 查看SQL执行频率
-- 查看当前会话统计结果
show session status like 'Com_______';
-- 查看自数据库上次启动至今统计结果
show global status like 'Com_______';
  • 定位低效率执行SQL
    两种定位方式:
    1.查看慢查询日志
    2.通过show processlist查看所有正在运行的线程
  • explain分析执行计划
-- 查询执行计划
explain select * from role r , (select * from user_role ur where ur.uid = (select uid from user where uname = '张飞')) t where r.rid = t.rid

在这里插入图片描述

字段含义
idid越大优先级越高,越先执行,id相同加载表的顺序从上到下
select_type表示select的类型
table输出结果的表
type表的连接类型
possible key可能使用的索引
key实际使用的索引
key_len索引字段的长度
rows扫描行的数量
extra执行情况的说明和描述

select_type:

select_type含义
SIMPLE简单的select查询,没有子查询或union
PRIMARY主查询,子查询中的最外层查询
SUBQUERY在select或where里的子查询
DERIVED在from列表里包含的子查询,被标记为derived(衍生)
UNION第二个select出现在union之后,则标记为union
UNION RESULT从union表获取结果的select

type:
效率:system > const > eq_ref > ref > range > index > all

type含义
NULL没有访问任何表
system系统表,少量数据;5,7及以上版本显示的是all
const命中主键索引或者唯一索引
eq_ref左表命中主键索引,且左表每一行对应右表每一行
ref左表命中非唯一性索引(主键索引和唯一索引都是唯一性索引)
range范围查询,使用between,<,>,in等操作
index仅扫描索引列的值
all全表扫描
  • show profile分析SQL执行时间
-- 查看是否支持profile
select @@have_profiling;
-- 开启profiling开关
set profiling = 1;

执行一系列sql语句后执行show profiles,可用来查看各个SQL语句的耗费时长
在这里插入图片描述
使用show profile查询某条SQL语句每个过程的花费时间

-- 用来查看query_id对应的SQL执行过程中,每个过程的花费时间。
show profile for query query_id;

  • trace分析优化器执行计划(仅了解)
-- 打开trace,设置格式为json
set optimizer_trace = "enabled=on",end_markers_in_json=on;
-- 设置trace最大可使用的内存
set optimizer_trace_max_men_size = 1000000;

查询trace,知道优化器如何执行的sql

select * from information_schema.optimizer_trace\G;

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

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

相关文章

使用pymodbus进行modbus-TCP通信

模拟modbus-slave 创建slave 设置 完成 安装pymodbus pip3 install pymodbus2.5.3代码 from pymodbus.client.sync import ModbusTcpClient from pymodbus.bit_read_message import ReadCoilsResponse from pymodbus.register_read_message import ReadInputRegistersRe…

uniapp - 微信小程序新版本发布之后用户端如何手动更新

解疑&#xff1a;微信运行时&#xff0c;会定期检查最近使用的小程序是否有更新。如果有更新&#xff0c;下次小程序启动时会同步进行更新&#xff0c;更新到最新版本后再打开小程序&#xff0c;尽可能保证用户能够尽快使用小程序的最新版本。开发者在后台发布新版本之后&#…

关于Java线程池相关面试题

【更多面试资料请加微信号&#xff1a;suns45】 https://flowus.cn/share/f6cd2cbe-627a-435f-a6e5-1395333f92e8 【FlowUs 息流】&#x1f4e3;suns-Java资料 访问密码&#xff1a;【请加微信号&#xff1a;suns45】 ————线程相关的面试题———— 0&#xff1a;创建线…

如何保持前端开发者的竞争力

这两年&#xff0c;我们经常听到一种声音&#xff0c;那就是“前端已死”。然而&#xff0c;事实并非如此。前端开发者在当今的软件开发中依然扮演着至关重要的角色&#xff0c;它是构建 Web 应用程序所必需的一部分&#xff0c;能够实现动态交互、良好的用户体验和友好的界面设…

vue实现瀑布流

1、在 src 目录下创建 component文件夹&#xff0c;在文件夹中创建 vue文件。 2、在 Vue文件中写入以下内容 <div class"pubu"><div class"left"><div class"pubu-item" v-for"item in left" :key"item.id"…

2023年10月12日历史上的今天大事件早读

公元前539年10月12日波斯国王大流士的军队攻克巴比伦 1492年10月12日西班牙独立日 1492年10月12日哥伦布“发现新大陆” 1773年10月12日法国天文学家梅西叶首次发现具有螺旋结构的星系 1885年10月12日清政府改台湾府为行省 命刘铭传为台湾巡抚 1929年10月12日苏军向张学良…

解决flex布局space-between 最后一行不对齐的问题

出现的问题&#xff1a; 方法一&#xff1a;给父级元素后面添加伪元素 在父盒子的样式里添加下列代码&#xff1a; &::after {content: ;flex: auto;} 方法二&#xff1a;计算 适用于每一行列数固定&#xff0c;且列宽度固定&#xff0c;需要进行计算&#xff0c;相比较…

ChatGPT或将引发现代知识体系转变

作为当下大语言模型的典型代表&#xff0c;ChatGPT对人类学习方式和教育发展所产生的变革效应已然引起了广泛关注。技术的快速发展在某种程度上正在“倒逼”教育领域开启更深层次的变革。在此背景下&#xff0c;教育从业者势必要学会准确识变、科学应变、主动求变、以变应变&am…

在创业公司,治愈了我的精神内耗

如果你看到下图的产品&#xff0c;你的第一反应是什么&#xff1f; 我的第一反应是&#xff0c;这样的产品会有市场吗&#xff1f;一个鼠标加上几个奇奇怪怪的键&#xff0c;披上 AI 的外衣&#xff0c;就有用户买单吗&#xff1f; 第二反应是&#xff0c;就算有市场&#xff0…

flinkcdc踩坑指南

文章目录 前言一、常见问题1.No suitable driver found for jdbc:oracle:thin:10.101.37.167:8888/orclpdb2.The db history topic or its content is fully or partially missing. Please check database history topic configuration and re-execute the snapshot3.com.verve…

【数据结构】二叉树的链式结构及实现

目录 1. 前置说明 2. 二叉树的遍历 2.1 前序、中序以及后序遍历 2.2 层序遍历 3. 节点个数及高度等 4. 二叉树的创建和销毁 1. 前置说明 在学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。由于现在大家对二叉树结构…

不用for循环,巧妙自动翻页获取所有数据

1、设置while循环的标记条件&#xff1b; 2、设置初始页码&#xff1b; 3、防止无限循环&#xff0c;设置最大循环次数为1000次&#xff1b; 4、当页码为第一次时&#xff0c;获取数据&#xff0c;并获取一共有多少页&#xff0c;并更新最大页码&#xff1b; 5、页码自动加…

FPGA面试题(4)(跨时钟域处理)

跨时钟域处理方法 慢->快快->慢单bit在快时钟域同步打拍&#xff0c;将信号同步到快时钟域展宽后同步打拍多bit异步FIFO异步FIFO握手信号 一.打两拍 适用于单bit跨时钟域处理所谓的打两拍就是定义两级寄存器实现延时 那为什么是打两拍&#xff0c;不是打一拍&#x…

方案:餐厅饭店AI智能视频监控可视化监管系统搭建方案

随着大众对食品卫生的要求逐渐提升&#xff0c;明厨亮灶已成为很多人选择就餐点的一大要求&#xff0c;明厨亮灶的产生对保障大众食安起到了十分显著的作用&#xff0c;后厨作为食品安全重要场所&#xff0c;需要“亮”出来&#xff0c;前厅也同时需要监控系统的保护&#xff0…

获取当日n个季度前的日期所处季度的最后一天——时间相关函数4

本文介绍的函数用于获取当日n个季度前的日期所处季度的最后一天&#xff08;有点绕&#xff0c;看后面例子就好理解了&#xff09;。 源码 def last_day_of_quarter_before_n_quarters(n):"""获取当日n个季度前的日期所处季度的最后一天:return: 当日n个季度前…

这才叫良心软件!

今年以来&#xff0c;大模型相关的技术究竟有多火&#xff0c;不用多说&#xff0c;相信大家心中也已有答案。 自GPT-4发布以来&#xff0c;各大互联网大厂都坐不住了&#xff0c;纷纷推出自己的大模型产品。 前段时间&#xff0c;“科大讯飞版”的 ChatGPT 正式上线了&#…

uniapp pc端和移动端列表上拉刷新加载分页

效果图&#xff1a; tips: 实现了pc端和移动端兼容 代码实现&#xff1a; html: <view v-if"answerList.length > 1" style"padding:30rpx 0;color:#888;text-align: center;"><view>{{loadMore}}</view> </view>data: …

一键切换IP地址:电脑IP更改的简便方法

今天我要和大家分享一个电脑IP更改的简便方法——一键切换IP地址。如果您想要更改电脑的IP地址&#xff0c;无需繁琐的设置和复杂的步骤&#xff0c;只需使用以下简单的方法&#xff0c;即可轻松实现IP地址的切换。让我们开始吧&#xff01; 1、使用批处理脚本 批处理脚本是一…

如何在使用JetBrains IDE时文本编辑更高效?这个IdeaVim好用

IdeaVim 插件已经发布一段时间了&#xff0c;它帮助开发者利用 Vim 的强大功能扩展 JetBrains IDE。JetBrains 内部有一个专属团队维护此插件&#xff0c;这为您提供了两项优势&#xff1a;以键盘为中心的编辑器和 IDE 的支持。 获取JetBrains IDE新版下载 Vim为文本中的跳转…