mysql索引

索引

索引是一种数据结构,是存储引擎用于快速找到记录的一种数据结构
例如:查找查字典,字典的前面方便根据拼音或偏旁部首部分就是索引的功能

索引的类型

在Mysql中,索引是在存储引擎层面而不是服务器层实现的,所以,并没有统一的索引标准,不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引

B-Tree索引

当人们谈论索引的时候,如果没有特别指明类型,多半说的是B-Tree索引
B-Tree是术语,底层的存储引擎也可能使用不同的存储结构,例如,NDB集群存储引擎内部实际上使用了T-Tree结构存储这种索引,即使其名字是BTREE;InnoDB则使用的是B+Tree
B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行权标扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索。节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找

全值匹配

全值匹配指的是和索引中的所有列进行匹配

匹配最左前缀

只使用索引的第一列

匹配列前缀

只匹配某一列的值的开头部分

匹配范围值

查找索引范围内的值

精确匹配某一列并范围匹配另外一列

第一列全匹配,第二列范围匹配

B-Tree索引的限制

如果不是按照索引的最左列开始查找,则无法使用索引
不能跳过索引中的列
如果查询中的某个列使用的范围查询,则右边所有列无法使用索引优化查找

哈希索引

基于哈希表实现,只有精确匹配索引所有列的查询才有效,对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针
Mysql中,只要Memory引擎显式支持哈希索引

哈希索引的限制

哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。不过,访问内存中的行为的速度很快,所以大部分情况下这一点对性能的影响并不明显
哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序
哈希索引也不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的
哈希索引只支持等值比较查询
访问哈希索引的数据非常快,除非有很多哈希冲突(不同的索引列值确有相同的哈希值)。当出现哈希冲突的时候,存储引擎必须遍历链表中所有的行指针,逐行进行比较,直到找到所有符合条件的行
如果哈希冲突很多的话,一些所有维护操作的代价也会很高

空间数据索引(R-Tree)

MyISAM表支持空间索引,可以用作地理数据存储,无须前缀查询,空间索引会从所有维度来索引数据,查询有效地使用任意维度来组合查询。

全文索引

全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值。全文搜索和其他几类索引的匹配方式完全不一样。它有许多需要注意的细节,如停用词、词干、和复数、布尔搜索等

索引的优点

索引打打减少了服务器需要扫描的数据量
索引可以帮助服务器避免排序和临时表
索引可以将随机I/O变为顺序I/O

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿文_ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值