MYSQL学习笔记:索引

MYSQL学习笔记:索引

文章目录

  • MYSQL学习笔记:索引
    • 索引的分类
    • 索引的创建删除
    • 索引优化
    • B树索引
    • B+树
    • InnoDB主键和二级索引树
    • 聚集索引与非聚集索引
    • 哈希索引
    • INNODB的自适应哈希索引
    • 索引和慢查询

在这里插入图片描述

  • 用索引也是要涉及磁盘I/O的操作的
  • 索引也是一种数据结构,对某列建索引的时候都要进行一个排序的,这一列的文件有增加减少修改都是要涉及索引数据的改动操作的

在这里插入图片描述

索引的分类

物理上分为聚集索引和非聚集索引

  • 普通索引:数量不限,可以给任意普通字段创建普通索引,一张表的SQL查询只能用一个索引
  • 唯一性索引:使用UNIQUE修饰的字段,值不能重复,主键索引隶属于唯一性索引
  • 主键索引:使用PRIMARY KEY修饰的字段,会自动创建索引(MYISAM,innoDB(如果没设主键,INNODB会自动创建,因为数据和索引存在一起,没有索引没办法存储数据))
    • 单列索引 在一个字段上创建索引
  • 多列索引: 在表的多个字段上创建索引(uid+cid,多列索引必须使用第一个列才能用到多列索引,否则用不到)
  • 全文索引:使用FULLTEX修饰的字段可以设置全文索引,支支持char varchar和text类型字段,常用于较大的字符串类型上,可以提高查询速度

索引的创建删除

方法1:在建表的时候建立索引

CREATE TABLE index1(id INT,
name varchar(20),
sex enum ('male','famale'),
INDEX(id,name);

方法2:在已创建的表上创建索引

CREATE [UNIQUE] INDEX 索引名 ON 表名(属性名(length)[ASC|DESC]);
create index pwdindex on user(age);

删除索引:

DROP INDEX 索引名 ON 表名;

加索引后只扫一行:不管数据规模如何,花费的时间一样长
在这里插入图片描述

索引优化

  1. 给经常用作where过滤条件的字段加索引
  2. 给字符串创建索引索引值尽可能短,不然存储文件大,加载慢
  3. 如果过滤条件涉及类型转换或者用了mysql的函数调用表达式计算,就不能用索引了。
    在这里插入图片描述
    password是字符串类型,10000是默认INT类型,如果涉及类型转换或者用了mysql的函数就不能用索引了

B树索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果用m=500(一般取300~500)阶B树最多用----》3层:
在这里插入图片描述

最理想的情况是一次磁盘IO读取的磁盘块内容刚好存储在B树的一个节点中
在这里插入图片描述

B+树

为啥用B+树而不是B树
首先看B树的特点:

  1. 索引和数据分散在不同的节点上,离根节点近搜索快,离根节点远搜索就慢,花费的IO不平均,每一行搜索花费的时间也不平均
  2. 每一个非叶子节点上不仅仅要存储索引(key) 还要存索引所在哪一行的data数据。一个节点能存放索引的key的个数比只存储key的节点少得多
  3. B树很不方便进行范围搜索(例如搜索13~18的数据,既要搜索左子树也要搜索右子树),整表遍历看起来不方便

在这里插入图片描述

在这里插入图片描述
非叶子节点只存储key不存储data,每个节点存储的key个数更多,理论上来讲层数更低,搜索效率更高
叶子节点上存储了所有的key值和对应的data,搜索每个节点最后都要到叶子节点上。每一行搜索时间非常平均
叶子节点被串在了一个链表当中形成了一个有序链表,如果对所引树进行搜索只需要遍历有序链表即可。进行范围查询的时候,也可以直接遍历有序链表,效率更高

InnoDB主键和二级索引树

在这里插入图片描述
二级索引树
在这里插入图片描述
在这里插入图片描述
这也是为啥多列所引想要被用到必须用到第一列

聚集索引与非聚集索引

myisam
非聚集索引:
在这里插入图片描述
主键索引:
在这里插入图片描述
在这里插入图片描述

INNODB辅助索引与主键索引:

在这里插入图片描述

在这里插入图片描述

反之,innoDB的那种数据索引不分离的方式就算聚集索引

哈希索引

在这里插入图片描述
在这里插入图片描述
hash索引就是一个链式哈希表
在这里插入图片描述
特点:
在这里插入图片描述

INNODB的自适应哈希索引

在这里插入图片描述
原来是先找到二级索引,然后在通过二级索引找到主键再搜索得到数据页
现在通过一个hash索引直接找到数据页
在这里插入图片描述
自适应hash索引的维护也是要耗费性能的,不是所有情况下都可以提升二级索引的查询性能
在这里插入图片描述

在这里插入图片描述
索引学习漫画链接

索引和慢查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何看更精确的时间:

在这里插入图片描述

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

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

相关文章

连续小波变换

1 连续小波变换 连续小波变换(CWT)用于分解小波信号。小波是时间上小的、高度局部的振荡。傅里叶变换将信号分解为无限长的正弦和余弦,从而丢失了所有时间位置信息,而CWT 的基本功能是时间局部化父小波的缩放和移位版本。CWT 用于构建信号的时频表示&am…

LeetCode225. 用队列实现栈(C++)

LeetCode225. 用队列实现栈 题目链接代码 题目链接 https://leetcode.cn/problems/implement-stack-using-queues/description/ 代码 class MyStack { public:queue<int> q1;queue<int> q2;MyStack() {}void push(int x) {q1.push(x);}int pop() {int size q1…

45、WEB攻防——通用漏洞PHP反序列化POP链构造魔术方法原生类

文章目录 序列化&#xff1a;将java、php等代码中的对象转化为数组或字符串等格式。代表函数serialize()&#xff0c;将一个对象转换成一个字符&#xff1b;反序列化&#xff1a;将数组或字符串等格式还成对象。代表函数unserialize()&#xff0c;将字符串还原成一个对象。 P…

配置前端项目到 github-pages

Quickstart for GitHub Pages - GitHub Docs

MySQL:合并查询语句

1、查询表的数据 t_book表数据 SELECT * FROM db_book.t_book; t_booktype表数据 SELECT * FROM db_book.t_booktype; 提醒&#xff1a; 下面的查询操作的数据来自上图查询表的数据 2. 使用 UNION 查询结果合并&#xff0c;会去掉重复的数据 使用UNION关键字是&#xff0c;数…

刷题日记 | 字符串扩容和增强型for循环

for(char c:s)遍历字符串 增强型for循环 C for(char c:s)遍历字符串 增强型for循环_c for (char c : s)-CSDN博客 字符串使用前要进行扩容 reserve函数 【CString类成员函数辨析】resize(),size(),capacity(),reserve()函数的解析与对比_c reserve函数-CSDN博客 a.size() 用来…

kali安装ARL灯塔(docker)

1、root身份进入容器 ┌──(root㉿Kali)-[~/桌面] └─# su root ┌──(root㉿Kali)-[~/桌面] └─# docker 2、先更新再克隆 ┌──(root㉿Kali)-[~/桌面] └─# apt-get update …

论文笔记:基于互信息估计和最大化的深度表示学习

整理了ICLR2019 LEARNING DEEP REPRESENTATIONS BY MUTUAL INFORMATION ESTIMATION AND MAXIMIZATION&#xff09;论文的阅读笔记 背景模型 论文地址&#xff1a;DIM code&#xff1a;代码地址 背景 发现有用的表示是深度学习的一个核心目标&#xff0c;由于之前的工作已经可以…

苍穹外卖知识点总结(一)

简介 技术选型 展示项目中使用到的技术框架和中间件。 用户层&#xff1a;node.js Vue.js ElementUI 微信小程序 apache echarts 网关层&#xff1a;nginx 应用层&#xff1a;Spring Boot Spring MVC Spring Task httpclie…

USACO 2024 Feb Bronze铜组题解

闲话:今天是4年一度的奇观——2月29日!(地球人都知道) 所以为了纪念这个特殊的日子&#xff0c;我决定倒着讲。这是什么奇怪的规矩&#xff1f;(雾 Maximizing Productivity: 二分即可。 #include <bits/stdc.h> using namespace std; const int maxn200005; int c[ma…

LTE 网络与互联网的连接

LTE 网络与互联网的连接 当用户设备 UE&#xff08;如手机&#xff09;开机后&#xff0c;就登记到 LTE 网络&#xff0c;以便使用网络资源传送 IP 数据业务。 LTE 网络内的数据路径由两大部分组成&#xff1a; -空口无线链路&#xff08;UE→eNB&#xff09;。 -核心网中的隧…

模糊PID控制算法实战讲解-案例温度控制(附C语言实现)

可结合之前的文章一起理解&#xff1a; 控制算法-PID算法总结-从公式原理到参数整定解析&#xff08;附C源码&#xff09;_pid自整定算法-CSDN博客 模糊控制算法实战讲解-案例温度控制&#xff08;附C语言实现&#xff09;-CSDN博客 目录 一、模糊PID控制的原理 1.1 模糊化…