MySQL下的索引

索引能够提高查询的性能。

MySQL下的索引是在存储引擎层实现的,而不是在服务器层实现的。因此针对不同的存储引擎有不同的索引类型和实现。

索引分类

一、B+Tree索引(InnoDB、MyISAM存储引擎都支持)

大多数MySQL的存储引擎默认都是B+Tree索引。有了B+Tree索引,因此就不需要进行全表扫描了,只需要对树进行搜索,提高了搜索速度。还能进行排序和分组。

可以指定多个列作为索引列,多个索引列共同组成键。B+Tree索引适用于全键值、键值范围和键前缀查找,其中键前缀查找只适用于最左前缀查找。

B+Tree张成怎么样呢?



二、哈希索引(只有MEMORY存储引擎支持)

基于哈希表实现,优点是查找非常快。如下图(图片来自网络)


哈希索引就是采用一定的哈希算法,将键值换算成新的哈希值,检索时不需要想B+Tree那样从根结点开始查找,而是经过计算直接定位,所以速度很快。

但是也有限制:

1)只支持精确查找,不能用于部分查找和范围查找。无法排序和分组。因为原来有序的键值经过哈希算法很可能打乱。

2)如果哈希冲突很多,查找速度很慢。比如在有大量重复键值的情况下。

三、空间数据索引

MyISAM支持空间数据索引,空间索引会以所有维度来索引数据,可以有效的使用任意维度来进行组合查询。

四、全文索引

MyISAM支持全文索引,用于查找文本中的关键词,而不是直接比较索引中的值。

索引的优点

1)减少了服务器需要扫描的数据量。

2)因为B+Tree是有序的,直接可以用来做group by和order by.

3)通过B+Tree的存储,减少了I/O次数。因为索引一般很大,都是以索引文件的形式存储在磁盘上,B+Tree中每个非叶子节点没有指向某个关键字具体的信息的指针,因此每个节点可以存放更多的关键字数量,所以一次性读入内存所需要查找的关键字就越多,减少了I/O操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值