从数据结构角度html
一、B+树索引(O(log(n))):关于B+树索引,能够参考 MySQL索引背后的数据结构及算法原理mysql
二、hash索引:
a 仅仅能知足"=","IN"和"<=>"查询,不能使用范围查询
b 其检索效率很是高,索引的检索能够一次定位,不像B-Tree 索引须要从根节点到枝节点,最后才能访问到页节点这样屡次的IO访问,因此 Hash 索引的查询效率要远高于 B-Tree 索引
c 只有Memory存储引擎显示支持hash索引算法
三、FULLTEXT索引(如今MyISAM和InnoDB引擎都支持了)sql
四、R-Tree索引(用于对GIS数据类型建立SPATIAL索引)数据结构
从物理存储角度spa
一、汇集索引(clustered index)code
二、非汇集索引(non-clustered index)htm
从逻辑角度blog
一、主键索引:主键索引是一种特殊的惟一索引,不容许有空值索引
二、普通索引或者单列索引
三、多列索引(复合索引):复合索引指多个字段上建立的索引,只有在查询条件中使用了建立索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合
四、惟一索引或者非惟一索引
五、空间索引:空间索引是对空间数据类型的字段创建的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。
MYSQL使用SPATIAL关键字进行扩展,使得可以用于建立正规索引类型的语法建立空间索引。建立空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中建立
CREATE TABLE table_name[col_name data type] [unique|fulltext|spatial][index|key][index_name](col_name[length])[asc|desc]
一、unique|fulltext|spatial为可选参数,分别表示惟一索引、全文索引和空间索引;
二、index和key为同义词,二者做用相同,用来指定建立索引
三、col_name为须要建立索引的字段列,该列必须从数据表中该定义的多个列中选择;
四、index_name指定索引的名称,为可选参数,若是不指定,MYSQL默认col_name为索引值;
五、length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;
六、asc或desc指定升序或降序的索引值存储