MySQL索引

B-Tree索引
B-Tree索引应用范围:
1、全值匹配
指的是索引中的所有列进行匹配。
2、匹配最左前缀
索引的第一列,比如查找所有姓为Allen的人。
3、匹配列前缀
匹配某一列的值的开头部分。
4、匹配范围值
前面提的查找在Allen和Barry之间的人
5、精确匹配某一列并范围匹配另外一列
比如查找所有姓为Allen,并且名字是字母K开头的。即第一列全匹配,第二列范围匹配。
B-Tree的限制(由于B-Tree是按照顺序,索引的顺序和where条件中字段的顺序请尽量保持一致):
1、如果不是按照索引的最左列开始查找,则无法使用索引。
2、不能跳过索引中的列。所以一个不常用的或范围列放在前面会导致后面的索引字段无法使用。
3、不能优化访问任何在第一个范围条件右边的列。例如:where first_name='aaa' and last_name like
'bbb%' and date='2013-05-21',索引只能使用头两列。因为LIKE是范围条件。

Hash索引
只有memory存储引擎支持显示的Hash索引,但是不支持唯一Hash索引。NDB Cluster支持唯一Hash索引。
由于Hash索引本身只保存简短的哈希值,Hash索引显得非常紧凑。Tinyint列的Hash索引和大型字符列的
Hash索引大小一样。
限制:
1、只包含哈希值和行指针,而不是值自身。
2、数据不是按照索引值顺序存储的,所以无法排序。
3、不支持部分索引列匹配查找,因为他们是被索引的全部值计算的。例如,在数据列(A、B)上建立哈希
索引,如果查询只有数据列A,则无法使用该索引。
4、只支持等值比较查询,包括=、in()、<=>,不支持范围查询,比如WHERE price > 100。
5、如果碰撞率(相同的哈希码很多),存储引擎必须访问每个行指针,然后比较数据,操作会比较慢。
特别适合:
数据仓库应用的的星型模式,需要关联很多查找表。

全文索引
FULLTEXT是一种特殊索引。从文本中找到关键字,而不是直接和索引中的值比较。
适用MATCH AGAINST操作,而不是普通的WHERE条件操作。


聚集索引
不是一种单独的索引类型,而是一种存储数据的方式。INNODB的聚集索引实际上在同样的结构中保存了B-
Tree索引和数据行。
当表有聚集索引的时候,它的数据行实际保存在索引的叶子页中。每个表只能有一个聚集索引,INNODB按照
主键聚集,如果没有主键会尝试使用唯一的非空索引代替,如果这个也没有就会定义隐藏的主键进行聚集。
(覆盖索引可以模拟多个聚集索引)

覆盖索引
包含了所有满足查询需要的数据的索引叫覆盖索引(covering index)。不是所有引擎都支持,并且只能使
用B-Tree来覆盖查询。
优势:
1、 索引记录通常小于全行大小,只读取索引,能减少数据访问量。
2、 索引是按照索引值排序的, I/O密集型范围访问比随机从磁盘提取数据快。
3、 大部分存储引擎缓存索引比缓存数据更好。例如myisam。
4、 在innodb上使用特别有用。

 

posted on 2015-08-21 09:36  kenwong  阅读(219)  评论(0编辑  收藏  举报

导航