mysq索引类别

索引都是在存储引擎层面实现的


1.BTREE索引

使用B-Tree数据结构创建的索引,索引值都是按顺序存放的,存储引擎不需要再全表扫描,取而代之的是从索引的根节点开始扫描,根节点存放了子节点的指针,随着向下层查找,随着查找值和节点值的比较(指针中右节点叶值的上下限),最终找到记录。

BTREE索引可以选择一个或者多个列作为索引。


create table test1(
one int not null;
two int not null;
three varchar(20) not null;
key(one,two,three)
);

注意:索引对多个值的排序依然是定时的顺序。

BTREE索引的查询类型:全值索引,匹配最左前缀(知识用多列中的一列),匹配列前缀(第一列中的前面若干字符),匹配范围值(第一类的某个范围之间),第一列全匹配第二列范围匹配,之访问索引部访问数据行。

注意:BTREE索引所有类型只能从第一列开始查找,而且无法用one和three但跳过two的索引,最后如果包含范围查询(like ’j%' ) 那么范围后的条件无法使用索引的性能优化。

2.哈希索引

基于哈希表的实现,存储引擎对每一行数据上索引的数据计算一个哈希码,并存储在索引中,同时哈希表保存指向每个数据行的指针,mysql中只有Memory支持哈希索引,如果有多个列的哈希值相同,索引以链表的形式存放多个记录指针到同一哈希条目或者叫桶中。

虽然哈希索引非常快,但是有如下限制:

1.索引只包含哈希值和行指针,不像btree存储具体数据行,所以不能使用索引避免读取行。

2.索引无法排序。

3.如果(a,b)在这两个列上建立哈希索引,如果查询时只用了a,则无法使用该索引,因为始终使用全部内容来计算的哈希值。

4.只支持等值比较运算(=,in(),<=>,)不支持范围查询。

5.哈希冲突(不同索引列有相同的哈希值)时,存储引擎只有遍历链条所有行指针进行比较。

6.哈希冲突很高,维护代价高。


3.全文索引

查找的是文本中的关键字,而不是比较索引值,更类似于搜索引擎的方法,相同列上创建全文索引和btree不会用冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值