索引 2022.7.15

本文介绍了数据库索引的概念,包括其优缺点、类型、创建和删除语法。讨论了B树和B+树的区别,并深入解析了MySQL如何设计索引。同时,提出了建立索引的原则和可能导致索引失效的情况。

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

什么是索引

索引的优缺点

优点

可以大大加快数据的检索速度,这也是创建索引的最主要的原因

缺点

牺牲了增删改的速度,因为在增删改的时候,为了保证索引的有序性,需要动态维护索引空间

创建索引需要占用磁盘空间

索引的类型

主键索引:关键字 primary key

唯一索引:关键字unique

普通索引(非唯一):关键字 index

全文索引:关键字 fulltext

聚簇索引 = 主键索引 = 一级索引

非聚簇索引 = (唯一索引,普通索引)= 二级索引

创建和删除索引的语法

(聚簇索引 = 主键索引是表自带的,我们自己是创建的都是非聚簇索引)

(如果表没有主键,那么会选择隐藏列 rowid 来创建聚簇索引)

创建

1.在 create table 建表的时候添加索引

2.在 create table 建表成功以后,使用 alter 语句添加索引

    alter table 表名 add index 索引名(字段名)

3.在 create table 建表成功以后,使用 create index 语句添加索引

   create index  索引名 on  表名(字段名)

删除

1.使用 alter 语句删除索引

  alter table 表名 drop index 索引名

2.使用 drop 语句删除索引

  drop index 索引名 on 表名

索引的数据结构

MySQL 的索引支持两种数据结构

B+TREE   B+树结构的索引

Hash         哈希结构的索引 (不支持范围查询)

数据结构的演进

二叉树

问题:无法自平衡

平衡二叉树 - AVL 树

左旋算法:当右边的叶子节点的深度 - 左边叶子节点的深度 > 1 的时候,触发左旋

右旋算法:当左边的叶子节点的深度 - 右边叶子节点的深度 > 1 的时候,触发右旋

目的:维持数的平衡

 

多路平衡二叉树 - B 树

树的度数:每个节点中可以存储的元素的个数

单路树:度数 = 1

多路树:度数=n ,n>1

同等规模的数据,单路树是高瘦树,多路数是矮胖树

B树和B+树的区别

MySQL 是怎么设计索引的

树的每一个节点是一个磁盘块,MySQL 将表的ibd 文件拆分为很多个磁盘块

每个磁盘块的大小统一是16KB,每次磁盘IO都是读取一个磁盘块的数据

一个磁盘块的数据也称为一页数据

建索引的原则

  
主键id就是离散度最好的(唯一性)

手机号码、身份证号码,用户的号码(唯一性)

所有具有唯一性的列都应该建索引(唯一索引)

建了唯一索引的列就有了唯一约束

PRIMARY KEY 主键(自带主键索引,唯一约束)

UNIQUE key 唯一键(自带唯一索引/二级索引,唯一约束)

离散度差的列,不建议单独建索引(性别)
 

直接使用索引覆盖把要查询的列全部覆盖进去

禁止使用select * ,只查覆盖住的字段,杜绝回表

多个字段组成索引,离散度最好的放在最左边,;离散度最差的放最右边

索引失效

1.不满足最左前缀原则

2.条件用了 != 或者 is not null 

3.用了左模糊 或全模糊 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值