一、聚集索引
决定表中数据行在磁盘上的物理顺序。一个表只有一个聚集索引,一般是主键。
二、非聚集索引
不决定物理顺序,索引上仅包含被建立索引的数据,以及一个行定位符,通过此定位符能找到行数据。
三、联合索引
在表中的多个字段上建立索引,加速复核查询的速度。
联合索引满足最左查询需求,例如(a,b,c)三列组成联合索引,能够使用索引的查询有a|(a,b)|(a,b,c)三种。
注意:使用联合索引查询数据,where条件后字段顺序不会影响是否使用索引。
四、唯一索引
避免数据重复,在一个或多个字段上建立索引。
注意:一个表中唯一索引可以有多个,但是列值必须唯一,创建唯一索引使用关键字unique,唯一索引列值允许为空。
五、B-Tree
btree索引是mysql最常用的索引算法,它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量,例如:
select * from table where col like ‘test%’;
但不支持:select * from table where col like ‘%est%’;
mysql数据在数据库中通过btree的方式将数据关联起来,查询时只需按照树的遍历方式遍历出数据范围即可。下图是二叉树和三叉树的数据索引关系,遍历方式以“左-右-根”顺序遍历,查询时可迅速定位数据范围。
六、Hash索引
hash索引是将数据以hash键值的方式存储起来,查询数据时通过定位键key来找到相应的值value。因此,hash索引不支持范围的查询,仅满足等值的过滤(等于、不等于)。
在数据库中的使用可以参考: http://blog.csdn.net/u012992688/article/details/48416539
hash索引算法原理可以参考: http://blog.csdn.net/tanggao1314/article/details/51457585