索引类型
MySQL 有三种索引类型 Normal,Unique,Full text
Normal:普通索引。
Unique:唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为 Unique。
Full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
索引类型总结,索引的类别由建立索引的字段内容特性来决定,通常 Normal 最常见。
索引方法
MySQL目前主要有以下几种索引方法:B-Tree,Hash,R-Tree。
1.B-Tree
B-Tree 是最常见的索引类型,所有值(被索引的列)都是排过序的,每个叶节点到跟节点距离相等。所以 B-Tree 适合用来查找某一范围内的数据,而且可以直接支持数据排序(ORDER BY)。
B-Tree 在 MyISAM 里的形式和 Innodb 稍有不同:
MyISAM 表数据文件和索引文件是分离的,索引文件仅保存数据记录的磁盘地址,
InnoDB 表数据文件本身就是主索引,叶节点data域保存了完整的数据记录。
2.Hash 索引
1.仅支持 “=”,”IN” 和 “<=>” 精确查询,不能使用范围查询:
由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash。
2.不支持排序:
由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且 Hash 值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算。
3.在任何时候都不能避免表扫描:
由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以即使取满足某个Hash键值的数据的记录条数,也无法从Hash索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。
4.检索效率高,索引的检索可以一次定位,不像 B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以Hash索引的查询效率要远高于 B-Tree 索引。
5.只有 Memory 引擎支持显式的 Hash 索引,但是它的 Hash 是 nonunique 的,冲突太多时也会影响查找性能。Memory 引擎默认的索引类型即是 Hash 索引,虽然它也支持 B-Tree 索引。
3.R-Tree索引
R-Tree 在MySQL 很少使用,仅支持 geometry 数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。