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://www.mzph.cn/news/872885.shtml

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

相关文章

什么才是好用的大模型?

随着大模型在千行百业的逐步落地,中国基础大模型正直面来自用户端的诸多拷问。 近日,随着OpenAI宣布禁止中国用户使用其API,更多的国产大模型都在提供替代方案和优惠措施,来吸引和支持开发者进行用户迁移。 这既是一次挑战&…

多多OJ评测系统 前端项目环境初始化 安装Vue脚手架 引入Arco Design组件

目录 确定环境 命令行输入 装一下脚手架 监测一下是否安装成功 创建一个项目 选择一系列的配置后 我们打开webStorm 配置脚手架后我们先运行 我们这边能获取到网址 其实我们脚手架已经帮我们做到了 接下来要引入相关的组件 选择用npm进行安装 我们建议的是完整引入…

UDP客户端、服务端及简易聊天室实现 —— Java

UDP 协议(用户数据包协议) UDP 是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接,简单来说,当客户端向接收端发送数据时,客户端不会确认接收端是否存在,就会发出…

windows镜像下载网站

一个专注于提供精校、完整、极致的Windows系统下载服务的仓储站,网站托管于Github。 网站:https://hellowindows.cn/ 下载方式:ED2k,BT,百度网盘 MSDN - 山己几子木,提供Windows 11、Windows 10等不同版本…

单例模式Singleton

设计模式 23种设计模式 Singleton 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 饿汉式 public class BankTest {public static void main(…

Qt模型/视图架构——委托(delegate)

一、为什么需要委托 模型(model)用来数据存储,视图(view)用来展示数据。因此,模型/视图架构是一种将数据存储和界面展示分离的编程方法。具体如下图所示: 由图可知,模型向视图提供数…

3D问界—MAYA制作铁丝栅栏(透明贴图法)

当然,如果想通过建立模型法来实现铁丝栅栏的效果,也不是不行,可以找一下栅栏建模教程。本篇文章主要是记录一下如何使用透明贴图来实现创建铁丝栅栏,主要应用于场景建模,比如游戏场景、建筑场景等大环境,不…

PGCCC|【PostgreSQL】PG考证对工作上有什么好处# PG证书

认证 PostgreSQL 考证(PostgreSQL Certification)在工作上有以下几个好处: 增强专业能力:通过考证,可以系统地学习和掌握 PostgreSQL 数据库的知识和技能,提高自己的专业水平。 提升职业竞争力&#xff1…

CentOS 7 初始化环境配置详细

推荐使用xshell远程连接,如链接不上 请查看 CentOS 7 网络配置 修改主机名 hostname hostnamectl set-hostname xxx bash 关闭 SElinux 重启之后生效 配置yum源(阿里) 先备份CentOS-Base.repo,然后再下载 mv /etc/yum.repos…

android R ext4 image打包脚本介绍

一、Android R打包指令使用介绍 (1)mkuserimg_mke2fs #./mkuserimg_mke2fs --help usage: mkuserimg_mke2fs [-h] [--android_sparse] [--journal_size JOURNAL_SIZE][--timestamp TIMESTAMP] [--fs_config FS_CONFIG][--product_out PRODUCT_OUT][--b…

小程序图片下载保存方法,图片源文件保存!

引言 现在很多时候我们在观看到小程序中的图片的时候,想保存图片的原文件格式的话,很多小程序是禁止保存的,即使是让保存的话,很多小程序也会限制不让保存原文件,只让保存一些分辨率很低的,非常模糊的图片…

QT-RTSP相机监控视频流

QT-RTSP相机监控视频流 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_settings("outSmart", "LiveWatcher&…

CentOS 7 安装MySQL 5.7.30

CentOS 7 安装MySQL卸载&#xff08;离线安装&#xff09; 安装配置MySQL之前先查询是否存在&#xff0c;如存在先卸载再安装 rpm -qa|grep -i mysql rpm -qa|grep -i mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64如下命令找到直接 rm -rf 删除&#xff08;删除…

MySQL增量备份

增备1 做增量备份前&#xff0c;是需要进行一次完成备份的 1、做数据修改 创建一个add1.t1 t1 包含&#xff1a;id,name 加2条数据 id | name | ---------- | 1 | add1 | | 2 | add2 | ----------操作如下&#xff1a; MySQL root(none):(none)> show databases; -…

Linux openEuler_24.03部署MySQL_8.4.0 LTS安装实测验证安装以及测试连接全过程实操手册

Linux openEuler_24.03部署MySQL_8.4.0 LTS安装实测验证安装以及测试连接全过程实操手册 前言: 什么是 MySQL? MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,…

C++ 入门基础:开启编程之旅

文章目录 引言一、C的第⼀个程序二、命名空间1、namespace2、namespace的定义 三、C输入 与 输出四、缺省参数五、函数重载六、引用1、引用的概念和定义2、引用的特性3、指针和引用的关系七、inline八、nullptr 引言 C 是一种高效、灵活且功能强大的编程语言&#xff0c;广泛应…

C1W4.Assignment.Naive Machine Translation and LSH

理论课&#xff1a;C1W4.Machine Translation and Document Search 文章目录 1. The word embeddings data for English and French words1.1The dataThe subset of dataLoad two dictionaries 1.2 Generate embedding and transform matricesExercise 1: Translating English…

张量分解(5)——Tucker分解

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

如何防范场外个股期权的交易风险?

场外个股期权交易&#xff0c;作为金融衍生品市场的重要组成部分&#xff0c;为投资者提供了更为灵活和多样化的投资策略。然而&#xff0c;其高杠杆、高风险特性也使得投资者在追求高收益的同时&#xff0c;面临着较大的交易风险。为了有效防范这些风险&#xff0c;投资者需要…

Kafka Producer发送消息流程之Sender发送线程和在途请求缓存区

文章目录 1. Sender发送数据1. 发送数据的详细过程&#xff1a;2. 关键参数配置 2. 在途请求缓存区 1. Sender发送数据 Sender线程负责将已经在RecordAccumulator中准备好的消息批次发送到Kafka集群。虽然消息在RecordAccumulator中是按照分区组织的&#xff0c;但Sender线程在…