mysql学习笔记(3)

今天学习的内容是mysql索引

那么什么是索引呢?

索引在mysql中也叫做是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能分厂奏效,尤其是表中数据越大,作用就越大。

索引的目的在于提高查询效率,我们可以用搜索树那样的方法遍历,这样查询范围就要笑的多,效率也就会更高。当然,知识用搜索树来举个例子,毕竟数据库实现复杂,一方面数据保存在磁盘上,另一方面为了提高性能,每次又会把部分数据读入内存来计算,磁盘的成本大概是内存的十万倍左右,所以简单的搜索树是难以满足应用的。

所以b+数就出现了,

1**.索引字段要尽量的⼩**:通过上⾯的分析,我们知道IO次数取决于b+数的⾼度h,假设当前数据表的数据为
N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N⼀定的情况下,m越⼤,h越⼩;⽽m = 磁
盘块的⼤⼩ / 数据项的⼤⼩,磁盘块的⼤⼩也就是⼀个数据⻚的⼤⼩,是固定的,如果数据项占的空间越⼩,
数据项的数量越多,树的⾼度越低。这就是为什么每个数据项,即索引字段要尽量的⼩,比如int占4字节,要
比bigint8字节少⼀半。这也是为什么b+树要求把真实的数据放到叶⼦节点⽽不是内层节点,⼀旦放到内层节
点,磁盘块的数据项会⼤幅度下降,导致树增⾼。当数据项等于1时将会退化成线性表。 2.索引的最左匹配特
性:当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索
树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下⼀步的所搜⽅向,如果
name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就
不知道下⼀步该查哪个节点,因为建立搜索树的时候name就是第⼀个比较因⼦,必须要先根据name来搜索才
能知道下⼀步去哪⾥查询。比如当(张三,F)这样的数据来检索时,b+树可以⽤name来指定搜索⽅向,但下⼀个
字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性
质,即索引的最左匹配特性。
 
接着说一下索引的应用:
 
聚集索引与辅助索引:
聚集索引:
#InnoDB存储引擎表是索引组织表,即表中数据按照主键顺序存放。⽽聚集索引(clustered index)
就是按照每张表的主键构造⼀棵B+树,同时叶⼦结点存放的即为整张表的⾏记录数据,也将聚集索引的
叶⼦结点称为数据⻚。聚集索引的这个特性决定了索引组织表中数据也是索引的⼀部分。同B+树数据结
构⼀样,每个数据⻚都通过⼀个双向链表来进⾏链接。
 
辅助索引:
表中除了聚集索引外其他索引都是辅助索引
 
聚集索引与辅助索引相同的是:不管是聚集索引还是辅助索引,其内部都是B+树的形式,即⾼度是平衡的,叶
⼦结点存放着所有的数据。
聚集索引与辅助索引不同的是:叶⼦结点存放的是否是⼀整⾏的信息
 
常用的索引:
普通索引INDEX:加速查找
唯⼀索引:
-主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
-唯⼀索引UNIQUE:加速查找+约束(不能重复)
联合索引:
-PRIMARY KEY(id,name):联合主键索引
-UNIQUE(id,name):联合唯⼀索引
-INDEX(id,name):联合普通索引
 
 
 
posted @ 2020-10-23 20:46  张千万  阅读(39)  评论(0)    收藏  举报