SQL调优-性能参数介绍

news2024/11/26 11:16:36
-- 课程表
create table course
(
cid int(3),
cname varchar(20),
tid int(3)
);
-- 教师表
create table teacher
(
    tid int(3),
    tname varchar(20),
    tcid int(3)
);
-- 教师证表
create table teacherCard
(
    tcid int(3),
    tcdesc varchar(200)
);

在这里插入图片描述
explain + select语句分析
在这里插入图片描述
在这里插入图片描述

1.id:

查询课程编号为2或教师证编号为 3 的教师信息,并分析此 SQL的执行计划

explain select t.* from teacher t, course c, teacherCard tc
where t.tid = c.tid and t.tcid = tc.tcid and ( c.cid = 2 or tc.tcid = 3);

在这里插入图片描述

SQL引擎约定:当id值相同时,table 按照从上往下顺序执行,即此 SQL 实际的执行顺序是先t表,再 tc 表,最后c表。

注意:此时t表和 tc 表各有3条数据,c表有4条数据。如果此时继续向t表再插入3条数据(即t表共6条数据、c表4条、tc表3条)

insert into teacher values(4,'tz',1);
insert into teacher values(5,'tw',2);
insert into teacher values(6,'tl',3);

在这里插入图片描述

可以发现,3 张表的执行顺序变为先执行 tc 表,再执行t表,最后执行c表。
结合多表查询笛卡尔积知识可知,多表连接查询时,为了提高查询效率,SQL引擎会先查询数据量较小的表再查询数据量较大的表。

explain select tc.tcdesc from teacherCard tc where tc.tcid =
(select t.tcid from teacher t where t.tid =
		(select c.tid from course c where c.cname ='sql')
);

在这里插入图片描述

可以发现,此时的 id 值不同。SQL引擎约定:id 值越大,查询的优先级越高。
其原因是,在执行子查询时,先查内层 SOL 再查外层 SQL。

2.select_type

SIMPLE 简单查询,不包含子查询、UNION 查询
PRIMARY 主查询,即包含子查询 SQL 中的最外层SELECT 语句
SUBQUERY 子查询,即包含子询 SQL 中的内层 SELECT 语句(非最外层)
Derived 衍生查询,使用到了临时表的查询
UNION 联合查询,使用到了 UNION的查询
UNION RESULT 告知 SQL 编写者,哪些表之间存在UNION查询。

Simple 示例:

EXPLAIN SELECT * FROM teacher

在这里插入图片描述

PRIMARY SUBQUERY示例:

explain select tc.tcdesc from teacherCard tc where tc.tcid =
(select t.tcid from teacher t where t.tid =
        (select c.tid from course c where c.cname ='sql')
);

在这里插入图片描述

在from子查询中只有一张表,那么该子查询就是一个 Derived
在 from 子查询中如果存在 table1 union table2 ,则 table1 的 select_type 是 Derived,table2 是UNION。

explain select cr.cname from (select * from course where tid = 1
union select * from course where tid = 2
) cr;

在这里插入图片描述

3. type

type表示使用的索引类型,需要注意,对 type 进行优化的前提是表中存在索引。索引类型的性能由高到低依次:system > const > eq_ref> ref> fulltext > ref_or_null> index_merge > unique_subquery > index_subquery > range > index > ALL,达到各个索引级别的条件如下。

system:

只有一条数据的系统表,或 衍生表只有一条数据的主查询。

const

仅仅能查到⼀条数据的SQL,⽤于primary key 或 unique的索引(其他索引类型不属于)

explain select * from test01 where tid =1;

在这里插入图片描述

eq_ref

唯⼀性索引,表索引与另外表的主键进⾏关联,两张表之间每条数据要⼀⼀对应(每个都要⼀⼀对应,不能⼀个对应多个,不能没有对应),查询的数据在表中是唯⼀性,不能有重复。

alter table teacherCard add constraint pk_tcid primary key(tcid);
alter table teacher add constraint uk_tcid unique index(tcid) ;

# 对 teacher 表进行索引唯一查询
explain select t.tcid from teacher t, teacherCard tc where t.tcid = tc.tcid;

在这里插入图片描述

ref

非唯一性索引。对于每个索引键的查询,返回不唯一的数据(0条或多条)

-- 给teacher表的name字段建索引(值有重复)
alter table teacher add index index_name(tname);
select * from teacher where tname='tz';

在这里插入图片描述

为了区分system/const、eq ref和ref,现在做以下小结。
system/const:查询结果只有一条数据
eq_ref:查询结果有多条数据,但是每个索引值对应的数据是唯一的。
ref:查询结果有多条数据,但是每个索引值对应的数据是0或多条

range

: 表示在某个范围内使用到了索引,通常见于 where 后面是范围查询的情况,如、>=、<=等。需要注意,由于 SQL 优化器会自动优化进而可能造成干扰,因此在between、>使用 in 等关键字进行范围查询时,索引有时候会失效,从而转为无索引的情况。

index

:全索引扫描,会查询全部的索引。

explain select t.tcid from teacher t

在这里插入图片描述

因为许多的索引类型与具体的使用场景有着密切关系,如要达到 system/const 的条件是结果集中只能有一条数据,因此在实际开发时,我们只要能达到ref或range 级别就已经不错了。

4.5.possible_key & key

possible keys 是 SQL引擎预测可能会用到的索引,但仅仅是一种预测,并不一定准确。key 表示实际查询使用到的索引。

6. key_len

索引的长度,可用于了解索引的定义情况,以及判断复合索引是否被完全使用。

create table test_kl
(
    name char(20) not null default ''
);
alter table test_kl add index index_name(name) ;
explain select * from test_kl where name ='' ;

在这里插入图片描述

在UTF-8编码格式下,1个字符占3个字节,因此20个字符长度的name共占60个字节。此外GBK格式下1个字符占2个字节;Latin-1格式下1个字符占1个字节

(如果索引的字段允许为 NULL,则会占用1个字节作为标识)

-- 新增name1字段,name1可以为null
alter table test_kl add column name1 char(20);
alter table test_kl add index index_name1(name1);
explain select * from test_kl where name1 ='';

在这里插入图片描述

-- 增加一个复合索引
drop index index_name on test_kl;
drop index index_name1 on test_kl;
alter table test_kl add index name_name1_index(name,name1);
explain select * from test_kl where name1 ='';
explain select * from test_kl where name ='';

在这里插入图片描述

(60+60+1)
在这里插入图片描述

VARCHAR这种可变长字节也有自己的特性:SQL引擎会额外增加2个字节,用于标识可变长字节

-- varchar并且可以为null
alter table test_kl add column name2 varchar(20) ;
alter table test_kl add index name2_index (name2);
explain select * from test_kl where name2 ='';

在这里插入图片描述

(60+2+1)

7. ref

指明当前表参照的字段

alter table course add index tid_index (tid)
explain select * from course c,teacher t where c.tid = t.tid and t.tname = 'tw';

在这里插入图片描述

8. rows

实际执行时,通过索引查询到的数据条数

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

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

相关文章

自监督ViT:DINO-v1和DINO-v2

1. 概述 基于ViT&#xff08;Vision Transformer&#xff09;自监督在最近几年取得了很大进步&#xff0c;目前在无监督分类任务下已经超过了之前的一些经典模型&#xff0c;同时在检测分割等基础任务领域也展现出了强大的泛化能力。这篇文章将主要基于DINO系列自监督算法介绍…

NoSQL之Redis高可用与优化

目录 一、Redis高可用二、Redis 持久化2.1 Redis 提供两种方式进行持久化2.2 RDB持久化2.2-1 触发条件2.2-2 执行流程2.2-3 启动时加载 2.3 AOF 持久化2.3.1 开启AOF2.3.2 执行流程2.3.3 执行流程启动时加载 三、RDB和AOF的优缺点四、Redis 性能管理4.1 查看Redis内存使用4.2 内…

Linux上,多个JDK版本如何管理(交流贴)

1. 多个JDK版本面临的问题 公司大多数业务都是用Oracle JDK 8&#xff0c;笔者做大数据查询引擎调研时&#xff0c;则需要使用JDK 17 因此&#xff0c;需要在Linux服务器同时安装JDK 8和17&#xff0c;同时需要能智能地快速切换JDK版本&#xff0c;已使用不同的查询引擎需求 …

一致性哈希算法

如何分配请求&#xff1f; 大多数网站背后肯定不是只有一台服务器提供服务&#xff0c;因为单机的并发量和数据量都是有限的&#xff0c;所以都会用多台服务器构成集群来对外提供服务。 但是问题来了&#xff0c;现在有那么多个节点&#xff08;后面统称服务器为节点&#xf…

史上最详细sqlmap入门教程

最近做安全测试&#xff0c;遇到了SQL盲注的漏洞&#xff0c;从发现漏洞&#xff0c;确认漏洞&#xff0c;协助开发复现漏洞&#xff0c;验证漏洞一整套流程下来&#xff0c;有了亿点点收获&#xff0c;下面分享给大家&#xff0c;希望对软件测试同学有所启发&#xff0c;难度不…

ChatGPT原理简介

承接上文GPT前2代版本简介 GPT3的基本思想 GPT2没有引起多大轰动&#xff0c;真正改变NLP格局的是第三代版本。 GPT3训练的数据包罗万象&#xff0c;上通天文下知地理&#xff0c;所以它会胡说八道,会说的贼离谱&#xff0c;比如让你穿越到唐代跟李白对诗&#xff0c;不在一…

JavaScript如何实现上拉加载,下拉刷新?

一、前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中。本质上等同于PC网页中的分页&#xff0c;只是交互形式不同。开源社区也有很多优秀的解决方案&#xff0c;如iscroll、better-scroll、pulltorefresh.js库等等。这些第三方库使用起来非常便捷。我们通过原生的方式…

(13)ADDA

AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟信号转换为计算机可操作的数字信号&#xff0c;ADC模拟-数字转换器 DA&#xff08;Digital to Analog&#xff09;&#xff1a;数字-模拟转换&#xff0c;将计算机输出的数字信号转换…

Spring MVC 框架

Spring MVC 框架 Spring MVC 简介Spring MVC 概述 Spring MVC入门案例案例步骤案例总结Bean 加载控制 请求与响应RequestMapping 设置请求路径请求参数五种类型参数传递普通参数POJO 数据类型嵌套POJO类型参数数组类型参数集合类型参数 JSON 数据传输参数日期类型参数传递响应 …

WPF MaterialDesign 初学项目实战(5):设计首页

原项目视频 WPF项目实战合集(2022终结版) 25P 其他内容 WPF MaterialDesign 初学项目实战&#xff08;0&#xff09;:github 项目Demo运行 WPF MaterialDesign 初学项目实战&#xff08;1&#xff09;首页搭建 WPF MaterialDesign 初学项目实战&#xff08;2&#xff09;首页…

甲骨文云服务器 您无权访问任何应用程序?怎么办

背景 注册了甲骨文&#xff0c;登入是个难题&#xff0c;每次登入都这样显示 您无权访问任何应用程序 解决办法 因为我的服务器在于日本的大阪&#xff0c;每次登入链接即使采用书签的方法都会自动跳转到中国或者美国&#xff0c;所以是登入的连接错误了&#xff0c;我们需…

Mysql实现对某一字段排序并将排名写入另一字段

文章目录 前言一、数据库表结构和样例数据二、排名操作1.普通排名2.无间隔排名3.有间隔排名运行结果如图&#xff0c;我们可以看出此时的75已然变成了6&#xff0c;实现了跳跃&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/34f7c4db158945f1a709fc40d6f1843…

.Net C# 使用 EF Core

使用ORM框架可以加快开发速度&#xff0c;现在简单说下在.Net开发中使用微软官方提供的ORM框架 Entity Framework Core初始化数据库及数据表上手用法。 首先引入依赖项&#xff0c;通过Nuget服务添加如下3个包&#xff0c;因为当前使用的SQL Server数据库所以引入的是SQL Ser…

【Java算法题】剑指offer_01数据结构

前言 刷题链接&#xff1a; https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 1. 链表 JZ24 反转链表 思路&#xff1a;基本操作&#xff0c;如下所示。 /* public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} }…

【开源硬件篇】STM32F103C8T6核心板

STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一、STM32F103C8T6芯片1.1 STM32F103C8T6简介1.2 芯片引脚说明 二、去耦电路2.1 原理图设计2.2 原理分析2.2.1 结论2.2.2 去耦效果图2.2.3 放置距离问题2.2.3 放置位置问题 2.3 PCB设计示例 三、晶振电路3.1 原理图设计3.2 原…

(9)AT24C02存储器

AT24C02是一种可以实现掉电不丢失的存储器&#xff0c;可用于保存单片机运行时想要永久保存的数据信息 存储介质&#xff1a;E2P ROM通讯接口&#xff1a;I2C总线容量&#xff1a;256字节 I2C总线&#xff08;Inter IC BUS&#xff09;是由Philips公司开发的一种通用数据总线 …

linux(基础IO)下

目录&#xff1a; 1.追加实现重定向 2.dup2系统调用 3.程序替换是否会影响我们曾经打开的文件呢&#xff1f;&#xff1f; ---------------------------------------------------------------------------------------------------------------------------- 1.追加实现重定向…

Linux操作系统安全

账号的基本概念 用户&#xff1a; Linux中通过建立不同权限的用户&#xff0c;合理的控制和运用系统的资源&#xff0c;并且可以帮助用户构建自己的私人空间&#xff0c;更好的组织和管理自己的文件。 当创建一个用户时&#xff0c;系统会操作 /etc/passwd /etc/shadow 这两个文…

(10)DS18B20温度传感器

DS18B20是一种常见的数字温度传感器&#xff0c;其控制命令和数据都是以数字信号的方式输入输出&#xff0c;相比较于模拟温度传感器&#xff08;如热敏电阻&#xff09;&#xff0c;具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围&#xff1a;-55C 到 125C通信接…

希望计算机专业同学都知道这些博主

湖科大教书匠——计算机网络 “宝藏老师”、“干货满满”、“羡慕湖科大”…这些都是网友对这门网课的评价&#xff0c;可见网课质量之高&#xff01;最全面的面试网站 湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程&#xff0c;用简单的语言描述复杂的…