索引类型:
1.按照数据结构角度:B+树索引,哈希索引,FULLTEXT索引
1)B+树索引:
B+的特性:1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;2.不可能在非叶子结点命中;3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
2)哈希索引:
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询)。也不支持多列联合索引的最左匹配规则。
3)FULLTEXT索引:
InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引。对于FULLTEXT索引的内容可以使用MATCH()…AGAINST语法进行查询。FULLTEXT索引只能由CHAR、VARCHAR和TEXT这几种类型的数据列构成。
全文搜索将忽略"常见的"单词,而"常见"在这里的含义是"至少在一半的数据行里出现过"。千万不要忘记这个特点,尤其是在你准备对数据表进行全文搜索测试时。你至少要在测试数据表里插入3个数据行。如果那个数据表只有一个或两个数据行,它里面的每个单词将至少有50%的出现几率,所以对它进行全文搜索将不会有任何结果。
2.按照物理存储角度:聚集索引,非聚集索引(索引覆盖)
1)聚集索引:
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
2)非聚集索引:
非聚集索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。对于非聚集索引,可以为在表非聚集索引中查找数据时常用的每个列创建一个非聚集索引。有些书籍包含多个索引。例如,一本介绍园艺的书可能会包含一个植物通俗名称索引,和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。
3.从逻辑角度可分为主键索引、普通索引,单列索引、多列索引、唯一索引、非唯一索引
1)主键索引:
主键索引是唯一索引的特殊类型。
数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
2)唯一索引:
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。
3)非唯一索引:
非唯一索引允许两行具有相同的索引值。
4)单列索引:
单列索引就是常用的一个列字段的索引,常见的索引。
5)多列索引:
多列索引就是含有多个列字段的索引。
总结:多列索引只有在where条件中含有索引中的首列字段时才有效。
6)普通索引:
这是最基本的索引类型,而且它没有唯一性之类的限制。
大家喜欢可以访问我的个人网站:http://www.yingminxing.com
如有疑问,欢迎沟通交流:QQ:370399195, 微信:yingminxing1988