索引概述
- 索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。
- 快速找出匹配一个WHERE子句的行。
Mysql中key和index的区别
key 是数据库的物理结构,它包含两层意义和作用,
- 约束(偏重于约束和规范数据库的结构完整性),
- 索引(辅助查询用的)。
index是数据库的物理结构,只用来辅助查询,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。
总结:key包含index,当单独使用key时,key和index有着相同作用,但当key前面加有约束时,key就不是简单建立普通索引了。
key的分类
- primary key:约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个主键索引
- unique key:约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个唯一索引;
- foregin key:约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个普通索引;
索引的分类
- 主键索引
- 唯一索引
- 普通索引
B树,B+树为什么更新适合外存索引
简单的解释就是,如果每次IO操作只能读取一个节点的话,作为多叉平衡树的B树,B+树,
读一次节点可以获得的分叉信息比二叉树(红黑树)多得多。
这样每次读取节点可以选择比较的索引信息就多,IO一次可以比较的次数就多,
而红黑树IO一次只能比较两个索引,所以B树,B+树找目标节点需要的IO次数就少了。