MySQL(7)内外连接+索引

目录

                1.内外连接;

                2. 索引;


1.内外连接:

1.1内连接:

语法: select 字段 from 表名 inner join 表名 on 字段限制;

1.2 外连接:

 分为左右外连接;

(1)左外连接:

语法: select * from 表名 left join 表名 on 字段限制.

🌰查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来:

(2) 右外连接:

语法: select * from 表名 right join 表名 on 连接条件.

🌰对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来:

列出部门名称和这些部门的员工信息,同时列出没有员工的部门:

 2. 索引:

2.1 目的:

目的: 提高海量查找数据的效率. 一般查找数据的效率是远远低于索引查找的效率的.

语法: select table 表名 add index(索引名);

2.2 认识磁盘:

(1) 扇区: (这里用一下博主一剑何风情的图片!!!)

扇区就是磁盘分的一块存储区域.(每个扇区存储大小是512字节)

结论: 磁盘扇区的大小和存储大小由关系, 那么就将操作系统和硬件之间进行交互了吗? 当然不是的因为磁盘的效率太低了, 读取的基本单位是数据块(4k). 所以系统读取磁盘是以数据块为单位, 4k单位.

2.3 随机访问和连续访问:

随机访问: 本次io本次扇区和上次扇区的地址不连续, 导致需要磁盘的磁头移动幅度变大;

连续访问: 本次io本次扇区和上次扇区的地址连续, 导致需要磁盘的磁头移动幅度变小;

 2.4 MySQL与磁盘交互的基本单位:

MySQL进行io的基本单位是16kb;  16384/1024=16;

磁盘设备的基本单位是512字节,  MySQL和磁盘进行数据交互的基本单位是16kb, 这个基本单位是page;

总结: a. MySQL数据文件里面都是以page存储的;

         b.MySQL里面涉及CURD(增删查改), 就需要计算,那么也就需要找到数据; 也要进行cpu计算, 首先要将数据存放到内存当中.

2.5 索引的了解:

一般表的创建默认存储引擎就是Innodb.

插入数据之后为什么数据都是有序的?

⭐为何MySQL和磁盘进行IO交互的时候,要采用Page的方案进行交互呢?用多少,加载多少不香吗?

        加载如果查找id=5需要查找5次, 下次还要查找还是这样, 但是如果是page将查找数据存储在page中然后加载到MySQL的buffer pool里面之后查找就不需要加载,减少io次数.采用局部性原理方案进行交互.

page: 因为mysql里面有多个page, 那么就需要将它们管理起来.

数据结构: 双向链表.

⭐为什么数据库在插入数据时要对其进行排序呢?我们按正常顺序插入数据不是也挺好的吗?

        排序的目的就是优化提高查找效率, 页内部存放数据的模块实际上就是链表结构, 链表特点增删快, 查询慢, 那么就需要索引时候都是有效查找, 速度就会加快.

多个page结构: 这样看结构查找效率也是很低.

页目录: 就是提高查找效率, 一种以空间换时间的方法.

单页page和多页page都可以使用到页目录;

目录页的本质也是页,普通页中存的数据是用户数据,而目录页中存的数据是普通页的地址

是不是和B+树的结构很像, 就是!!!

总结: (1) page分为目录页和数据页, 目录页只放下一page的最小键值.

(2) 查找的时候只要加载目录到内存中进行筛选即可.

⭐InnoDB 在建立索引结构来管理数据的时候,其他数据结构为何不行?

链表是线性结构查找效率低, 二叉搜索树, 可能会退化为单只二叉树效率低;

AVL和哈希表, 二叉树结构, 相比于B+树后者更好;

哈希: 有一些存储引擎使用到, 但是Inodb和MISAM都是B+树.

为啥是B+树不是B树? B+树最后子节点是链表形式连接.

 2.7 聚簇索引 VS 非聚簇索引:

MyISAM和inoDB的区别:

MyISAM 最大的特点是,将索引Page和数据Page分离,也就是叶子节点没有数据,只有对应数据的地址。 相较于InnoDB索引, InnoDB 是将索引和数据放在一起的。

非聚簇索引: MyISAM, 用户数据与索引数据分离;

聚簇索引: 用户数据与索引数据在一起;

辅助索引: 用户按照其他信息建立索引;

主键索引: 按照主键信息进行索引; 

回表查询: 检索辅助索引获得主键,然后用主键 到主索引中检索获得记录;

 2.8 索引操作:

2.8.1 创建主键索引:

(1) 在创建表的时候,直接在字段名后指定

primary key create table user1(id int primary key, name varchar(30));

(2) 在创建表的最后,指定某列或某几列为主键索引

create table user2(id int, name varchar(30), primary key(id));

(3) 创建表以后再添加主键

create table user3(id int, name varchar(30));

alter table user3 add primary key(id);

特点:  主键索引不能为空, 而且最多只有一个, 效率高, 一般类型是int;

 2.8.2 唯一键索引:

(1) 在表定义时,在某列后直接指定unique唯一属性

create table user4(id int primary key, name varchar(30) unique);

(2) 创建表时,在表的后面指定某列或某几列为unique

create table user5(id int primary key, name varchar(30), unique(name));

(3) 创建完后修改:

create table user6(id int primary key, name varchar(30));

alter table user6 add unique(name);

特点: 可以有多个唯一键索引, 但是不能重复数据, 唯一键指定not null就是主键索引.

 2.8.3 普通键索引:

(1) 在表的定义最后,指定某列为索引:

create table user8(id int primary key, name varchar(20), email varchar(30), index(name));

(2) 创建完表以后指定某列为普通索引:

create table user9(id int primary key, name varchar(20), email varchar(30));

alter table user9 add index(name);

(3) 创建一个索引名为 idx_name 的索引:

create table user10(id int primary key, name varchar(20), email varchar(30));

create index idx_name on user10(name);

特点: 一张表可以有多个普通索引, 而且数据可以重复.

 2.8.4 全文索引:

场景: 进行大量的文字查询, 搜索引擎必须是MyISAM;

其中工具: explain, 查看是否是否索引;

使用: select * from 表名

         where match (字段) against ('查询数据');

 2.8.5 查询索引:

(1) show keys from 表名;

(2) show index from 表名;

(3) desc 表名;

 2.8.6 删除索引:

(1) 删除主键索引: alter table 表名 drop primary key;

(2) 删除其他索引: alter table 表名 drop index 索引名;

(3) drop index 索引名 on 表名;

 2.8.7 索引创建原则:

(1) 条件繁琐字段适合作为索引;

(2) 唯一性好或者不频繁查询的可以作为索引;

(3) 出现在where子句的字段可以作为索引;

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

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

相关文章

MySQL(8)事务

目录 1.事务; 1.事务: 1.1 如果CURD不加限制会这么样子? 可能造成数据同时被修改, 数据修改的结果是未知的.(可以想一下之前的抢票线程问题) 1.2 事务概念: 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功&#xff0…

【Python实战因果推断】40_双重差分11

目录 Heterogeneous Effect over Time Heterogeneous Effect over Time 有好消息也有坏消息。首先是好消息:你已经发现了问题所在。也就是说,你知道 TWFE 在应用于具有时间异构效应的交错采用数据时是有偏差的。用更专业的术语来说,您的数据…

TDesign组件库日常应用的一些注意事项

【前言】Element(饿了么开源组件库)在国内使用的普及率和覆盖率高于TDesign-vue(腾讯开源组件库),这也导致日常开发遇到组件使用上的疑惑时,网上几乎搜索不到其文章解决方案,只能深挖官方文档或…

大厂面试官问我:Redis为什么使用哈希槽的方式进行数据分片?为什么不适用一致性哈希的方式?【后端八股文十三:Redis 集群哈希八股文合集(1)】

本文为【Redis 集群哈希 八股文合集(1)】初版,后续还会进行优化更新,欢迎大家关注交流~ hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注…

pdf怎么转换成图片?3种PDF转图片方法分享

pdf怎么转换成图片?将PDF转换成图片不仅满足了快速分享的需求,还便于在多种平台上展示。特别是在社交媒体、演示文稿或在线文档中,图片格式的PDF页面更加直观易用。此外,转换成图片后,我们还可以利用图片编辑工具对PDF…

【Linux】启动的秘密花园:深入GRUB、Init系统和Systemd

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Linux的起源与发展 2、Linux的特点 3、Linux启…

Java中的迭代器(Iterator)

Java中的迭代器(Iterator) 1、 迭代器的基本方法2、 迭代器的使用示例3、注意事项4、克隆与序列化5、结论 💖The Begin💖点点关注,收藏不迷路💖 在Java中,迭代器(Iterator&#xff0…

隐性行为克隆——机器人的复杂行为模仿学习的新表述

介绍 论文地址:https://arxiv.org/pdf/2109.00137.pdf 源码地址:https://github.com/opendilab/DI-engine.git 近年来,人们对机器人学习进行了大量研究,并取得了许多成果。其中,模仿学习法尤其受到关注。这是一种从人…

无线通信 | 发射系统架构:两次变频发射机和直接变频发射机

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、发射系统架构 1、两次变频发射机 2、直接变频发射机…

微信小程序 vant-weapp的 SwipeCell 滑动单元格 van-swipe-cell 滑动单元格不显示 和 样式问题 滑动后删除样式不显示

在微信小程序开发过程中 遇到个坑 此处引用 swipeCell 组件 刚开始是组件不显示 然后又遇到样式不生效 首先排除问题 是否在.json文件中引入了组件 {"usingComponents": {"van-swipe-cell": "vant/weapp/swipe-cell/index","van-cell-gro…

图新地球-如何快速绘制各种形状的箭头(一分钟小视频演示)

0.序 随着近几年测绘成果的完善,很多检察院、规划院、自然资源局等政府与事业单位,日常的应用也都不在仅仅局限于原来的卫星影像底图了,很多院都应用上了无人机航测高分辨率影像以及倾斜模型。 可能经常需要再道路中央标注汽车行驶方向、掉头…

AQS源码解析(ReentrantLock)

什么是AQS:Juc中的大多数同步器都是围绕着一些相同的基础行为,比如等待队列,条件队列,共享,独占获取变量这些行为,抽象出来就是基于AQS(AbstractQueuedSynchronizer)实现的。所以可以把AQS看成这…

Iterator 与 ListIterator:Java 集合框架中的遍历器比较

Iterator 与 ListIterator:Java 集合框架中的遍历器比较 1、Iterator1.1 特点 2、ListIterator2.1 特点 3、Iterator 和 ListIterator 的区别4、示例4.1 使用 Iterator 遍历 Set4.2 使用 ListIterator 遍历 List 并修改 5、总结 💖The Begin&#x1f49…

智慧农业新纪元:解锁新质生产力,加速产业数字化转型

粮食安全乃国家之根本,“浙江作为农业强省、粮食生产重要省份,在维护国家粮食安全大局中肩负着重大使命。浙江粮食产业经济年总产值已突破4800亿元,稳居全国前列,然而,同样面临着规模大而不强、质量效益有待提升、数字…

全网超详细客户端连接Redis

使用官方Redis Insight(不支持中文) 下载地址 https://redis.io/insight/ RedisInsight - The Best Redis GUI 下载信息可随便填写 添加redis 点击链接

艺术与技术的交响曲:CSS绘图的艺术与实践

在前端开发的世界里,CSS(层叠样式表)作为网页布局和样式的基石,其功能早已超越了简单的颜色和间距设置。近年来,随着CSS3的普及,开发者们开始探索CSS在图形绘制方面的潜力,用纯粹的代码创造出令…

Kafka 高并发设计之数据压缩与批量消息处理

《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。 压缩,是一种用时间换空间的 trade-off 思想,用 CPU 的时间去换磁盘或者网络 I/O 传输量,用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。 Kafka 是一个高吞吐量、可扩展…

【PostgreSQL】PostgreSQL简史

博主介绍:✌全网粉丝20W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【教学类-67-04】20240718毛毛虫ABC排序

背景需求 【教学类-67-01】20240715毛毛虫AB排序-CSDN博客文章浏览阅读747次,点赞17次,收藏8次。【教学类-67-01】20240715毛毛虫AB排序https://blog.csdn.net/reasonsummer/article/details/140443310【教学类-67-02】20240716毛毛虫ABB排序-CSDN博客文…

Atcoder ABC351 A-E 题解

A: 打卡题 题目描述 一中队和二中队正在进行一场棒球比赛&#xff0c;一中队是第一棒。 目前&#xff0c;比赛已进行到第九局上半&#xff0c;第九局下半即将开始。 一中队在 第i局 (1 < i < 9) 上半场得到了 Ai 分&#xff0c;二中队在 第j局 (1 < j < 8) 下…