Mysql索引探究

一 索引

1.索引的优缺点

Mysql索引有优点也有缺点,优点就是大大加快了查询速度,唯一索引也保证每一行的唯一性,加速表连接时间,
缺点就是创建维护索引需要时间,也要占用磁盘空间。更新表的时候,索引要一并更新。

2.索引的数据结构

1 哈希索引,利于等值查询
2 有序数组索引,利于范围查询
3 搜索树索引,尤其是B+树这种多路搜索树,是Mysql索引的数据结构,在二节中详细论述。

3 索引的种类

1 聚簇索引(主键索引),→mysql中innodb使用
2 非聚簇索引(二级索引),→mysql中MyISAM使用
3 覆盖索引

4 如何创建Mysql索引

create index 索引名 on 表名(列名)  --普通索引
create unique index 索引名 on 表名(列名)  --唯一性索引

二 Mysql索引的数据结构

1 二叉搜索树

二叉搜索树等同于二叉查找树,又叫二叉排序树,在二叉树的基础上,
二叉搜索树中左子树上所有结点的值小于它根节点的值,右子树上所有结点的值大于它结点的值。
平衡二叉树是平衡二叉搜索树的简称,每一个结点的左子树的高度和右子树的高度差最多为1.
平衡二叉树的出现是为了解决二叉查找树退化成链表的问题,当插入的结点数值从小到大时,二叉树就会退		     化成链表。

2 B树和B+树

B树不是二叉树,因为B树的结点可以有两个以上的子结点,通常用于数据库和文件系统,现实中MongoDB索引的数据结构用的就是B树
	B树的特点:比如m阶B树,这里B树的阶指的是B树中结点的子结点树木的最大值
		①每个结点最多只有m个结点,
		②每个非叶子结点具有至少m/2(向上取整)子结点。除了根结点
		③如果根不是叶结点,则根至少有两个子结点
		④具有K个子结点的非叶结点包含K-1个键
		⑤自平衡的特性,导致所有叶子都出现在统一高度。

例:下列树为4阶B树:B树示例

B+树是B树的变形,B+树的特点:
	①有k个子树的非叶子结点包含有k个键,B树是k-1个。
	②B+树的所有数据都放在叶子结点中,非叶子结点只用来存索引
	③B+树的叶子结点本身依关键字大小自小而大的顺序连接,而且每个叶子结点里存了非叶子结点的指针

例如:B+树

B+树比B树好在哪里?
1.B+树的磁盘IO次数更少,效率更高,因为B+树的非叶子结点没有指向关键字具体信息的指针,所以更小,那么磁盘块中容纳的关键字数量就越多,一次性读入到内存中的就越多,IO次数就变少了。
2.B+树更稳定,因为B+树中所有叶子结点里关键字的查找需要走一条从根到叶子的路径,这样的路径是一样长的,每一个关键字的查询效率相当。但是B树更快,因为它每个结点中都有具体的关键字信息。
3.B+树更方便范围查询,而范围查询是数据库中最常用的查询功能。这利用了B+树的所有关键字信息都在叶子结点的特征,而且所有叶子结点由左至右是按顺序的。所以也说明了数据表在设计的时候一般采用主键自增的方式。

补充

1.mysql中关键字的执行顺序
答:from→on→join→where→group by→having→select→distinct→order by.
3.聚簇索引(主键索引)和非聚簇索引(二级索引)的区别:
答:聚集索引是把索引和数据放在一起,一般要两次查找,;非聚集索引是把索引和数据分开,叶子节点不存放数据,只存放数据对应的地址,不用两次查找但是就是因为把索引和数据分开,导致每次读入索引时,还要重新读数据,索引仍然不快,不适合范围查询
2.使用select 列名而不是使用select * 的原因
答:在innodb中使用了聚簇索引,当查询列是索引列时,为了防止回表耽误时间,所以不要用select *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值