初始mysql索引(一)

文章介绍了数据库索引的概念、类型,如普通索引、唯一索引、主键、聚集索引和非聚集索引,以及B+Tree和Hash索引的工作原理。此外,还讨论了InnoDB存储引擎下的聚集索引和二级索引的区别,并提到了SQL性能分析方法,包括慢查询日志和profile的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引是一种加快检索的数据库结构,他包含从表或者视图的一列或多列生成的键,以及映射到指定数据库存储位置的指针。
索引是直接加在字段上的,创建索引是需要消耗时间的 ,索引也需要占用物理空间

常见索引类型

普通索引
唯一索引:【UNIQUE】 主键自带索引
聚集索引:【CLUSTERED】
非聚集索引:【NONCLUSTERED】
全文索引: 主要用于varchar char text等类型上
单列索引: 只能作用一个字段
多列索引 : 多个字段连起来创建索引 空间索引

创建索引

语法:

create  索引类型  index 索引名 on 表名(需要添加索引的列)

例1) 为表SC在SNO,CNO上建立唯一索引。

 create unique index T on SC(SNO,CNO)

例2)为教师表T在TN 上建立聚集索引

create clustered index Y on TN (TN)

例3)为教师表T在TN 上建立非聚集索引

create nonclustered index Y on TN (TN)

删除索引

 语法: DROP index  表名.具体要删除的索引名

例1)删除T表中索引名为T1的索引

drop index T.T1

有索引会形成一个二叉树
在这里插入图片描述

索引的优缺点

在这里插入图片描述

索引结构

如果没有指定 默认都是B+Tree索引
在这里插入图片描述

如果以二叉树为数据结果那么如果数据是有序的 那么检索的时候就是会层级比较深性能大大降低,为了规避这种情况我们使用红黑树。
但是红黑树在大数据情况下 层级较深 检索速度会变慢
在这里插入图片描述

B-Tree

每个节点最多存4个key 5个指针

当超过节点key时中间节点会向上分裂
在这里插入图片描述

B-Tree的数据保存过程

例如此时再插入一个1200的值节点
在这里插入图片描述

插入1200后 345成为中间节点则向上分裂
在这里插入图片描述

当再插入一个值为1234的节点时因为1234大于345 放右边
在这里插入图片描述

可视化数据结构显示:
https://www.cs.usfca.edu/~galles/visualization/BTree.html

B+树

所有的元素都会出现在叶子节点,并且叶子节点会形成一个单向链表,非叶子节点作为索引的作用,叶子节点作为存储数据的作用
在这里插入图片描述

Mysql中的B+Tree
在这里插入图片描述

Hash索引
HASH索引会把这一行数据计算其HASH值,然后例如我们需要把下列的name 创建Hash索引,则根据name的值计算HASH槽位 来获取里面的值
在这里插入图片描述

索引分类
在这里插入图片描述

在InnoDB存储引擎下又可以细分为聚集索引和二级索引
在这里插入图片描述
在这里插入图片描述

聚集索引和二级索引的区别
在这里插入图片描述

例子:

回表查询

先根据二级索引找到对应的聚集索引id 然后根据聚集索引id找到该行数据(查原表)

SQL性能分析

1.SQL执行频率查询

语句 show global status like 'com_______'    # 7个下划线

在这里插入图片描述

慢查询日志

在这里插入图片描述

profile

profile能够在我们进行sql优化的时候查看耗时情况

select @@have_profiling    # 检查是否支持
SET profiling =1  # 开启profile 默认是关闭的
show profiles; # 查看每一条sql的耗时基本情况
show profile for query query_id;  # 查看指定query_id的sql语句的各个阶段的情况
show profile cpu query query_id;    # 查看指定query_id的sql语句的cpu使用的情况

例子:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值