MySQL 索引 MySQL 索引
存储方式区分(物理上的区分)
B+树(tree) 索引
B+树索引又称为 BTREE 索引,``目前大部分的索引都是采用 B+树索引来存储的`
包含的组件
叶子节点
包含的内容是:
表里面的数据行
指向下一个叶子节点的指针
分支节点
包含的内容是:
其他的分支节点或叶子节点
根节点
包含的内容是:
根节点
本数据结构的应用
表中的每一行,都会在(B+tree)索引上对应一个值, 因此吗,在表进行数据从的查询时,
就可已根据(B+tree)上的索引值确定表中的数据的所在行
哈希索引(Hash)
哈希
也可以翻译为散列
概念:将任意长度的输入(或者叫做映射 pre-image) 通过
散列算法
转换成固定长度的输出,该输出的值----就是散列值
哈希索引
目前MySQL仅仅MEMORY引擎(利用内存存取的引擎)支持该索引
哈希索引并不是如同B+tree索引的数据结构的方式来查找数据,
而是直接利用散列值(哈希值)计算来获取数据
逻辑区别
逻辑区别,主要是根据索引的用途来区分,共5类
- 普通索引:基本索引,提高访问速度
KEY INDEX
- 唯一索引:基本索引,避免数据重复
UNIQUE KEY
- 主键索引:专门为主键字段创建的特殊索引
PRIMARY KEY
- 空间索引:对空间数据类型创建的特殊索引
- 全文索引:用于查找文本中的关键字,只有MYISAM存储引擎支持
FULLTEXT
普通索引
- MySQL中最基本的索引,没有任何的限制,唯一的任务就是加快系统对数据的访问速度
- 普通索引允许在定义索引的列中插入
重复值
空值
为表 student 表的 id 列建立一个索引 index_id
create index index_id on student(id);
主键索引
一张表只能有一个主键索引
唯一索引
可以定义到多个里面
索引的实际操作
显示所有的索引信息
show index from student;
增加一个全文索引
alter table student add fulltext index student(stuName);
利用全文索引匹配查询
explain select * from student where match(stuName) aginst('事务');
可以看到,加入全文索引后,与不加全文索引后,所执行的查询类型并不一样
未加全文索引
加入了全文索引