前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常见索引类型及在MySQL中的应用

常见索引类型及在MySQL中的应用

作者头像
关忆北.
发布2022-11-16 14:05:01
1.1K0
发布2022-11-16 14:05:01
举报
文章被收录于专栏:关忆北.关忆北.
什么是索引?

索引是一种数据结构,是对记录集的一个或多个字段的值进行排序的存储结构。

索引是如何工作的?

索引的出现其实是为了提高数据查询的效率,就像书的目录一样,根据目录可以快速定位到内容,类比于索引,根据索引提供指向存储在表的指定列中的数据值的指针,根据指针找到包含该值的行。

索引的常见模型
  • 哈希表
  • 有序数组
  • B+树
哈希表

哈希表模型是将待查询的值放入key中,value值放入数组中,

当使用哈希表时,key值计算成确定位置,将value值放入该地址对应的哈希槽,取值通过key值去对应哈希槽取数据,但经过哈希后的key可能会出现数据重复一致(哈希冲突)的情况,此时哈希槽中的值是一个列表,使用列表遍历查询到目标值。

Usern2、Usern4计算出的哈希值都是N,N对应的User4、User2,通过遍历取出数据。

当Key值不是递增的时,此情况下新增数据速度快,但缺点是数据不是有序的,在区间查询时需要遍历实现,所以速度很慢。

**因此哈希表模型只适用于等值查询的场景。**比如 Memcached 及其他一些 NoSQL 引擎。

等值查询:确定的条件查询,即可以使用等号的查询 与之对应的是模糊查询、范围查询。

有序数组

有序数组在等值查询和范围查询场景中的性能都非常优秀。

仅看查询效率,有序数组是最好的数据结构,使用二分法查询可以快速查询到目标值,时间复杂度是O(log(N))。但是在中间插入一个记录时就必须得挪动后面所有的记录,成本太高。

有序数组只适用于静态存储引擎。

二叉树

二叉树的特点是:父节点左子树所有节点的值小于父节点的值,右子树所有节点的值大于父节点的值。查询复杂度是O(log(N))

O(log(N)):使用二分法查询,最理想的情况是查询一次即可,最坏的情况下需要查询的次数。 16个元素的有序数组,使用二分法查找其中一个元素,最多需要查询log 2 16 = 4次。

二叉树是搜索效率最高的,但是实际上没有多少数据库存储使用,因为索引不止存在于内存中,还要写在磁盘上。数据量较大时,二叉树的树过高,查询时需要访问过多节点,即需要硬盘多次寻址,这是一个耗时操作。

N叉树

概念:允许树的每个节点可以有两个以上的子节点,那么这个树就称为N阶多叉树。

MySQL默认一个节点的长度为16K,一个整数(bigint)字段索引的长度为8B,另外每个索引还跟着6B的指向其子树的指针;所以16K/14B≈1170。

树高是4的时候,就可以存1200的3次方个值(17亿),树根的数据总是存在内存中的,一个10亿行的表上一个整数字段的索引,查找一个值最多只需要访问3次磁盘。树的第二层也大概率在内存中,那么访问磁盘的次数就少了。

N 叉树由于在读写上的性能优点,以及适配磁盘的访问模式,已经被广泛应用在数据库引擎中。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是索引?
  • 索引是如何工作的?
  • 索引的常见模型
  • 哈希表
  • 有序数组
  • 二叉树
  • N叉树
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档