Mysql-索引数据结构

一.前言:

在我们的生活中,导出可以看到索引效果的应用,如在火车站观看的车次表、字典的目录等。它们的作用就是索引的作用,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据(字典的A-Z查找)。

生活举例-乘火车:我去乘火车回老家,如果要坐火车时没有车次表,最坏的结果我要跑遍每一个火车停靠点才能找到我要坐的火车;但是有了时刻表,我能快速知道我要做的火车在哪里停靠,可以直接奔向那里去,而不是一个一个过去看看是否为我要做的列车,从而加快访问的速度。这个车次表,就是数据库的索引。

二.磁盘原理:

这一部分文字理论比较多,看着还头疼,有兴趣也可看看,没兴趣也不影响后边篇章的阅读,只要记住本部分的一个结论即可:

读取数据尽可能的【减少与操作系统I/O交互的次数】。

好了没兴趣的可以跳过了,到下一部分了。

数据库实现比较复杂,数据保存在磁盘上,而为了提高性能,每次又可以把部分数据读入内存来计算,因为我们知道访问磁盘的成本大概是访问内存的十万倍左右,所以简单的搜索树难以满足复杂的应用场景。前面提到了访问磁盘,那么这里先简单介绍一下磁盘IO和预读,磁盘读取数据靠的是机械运动,每次读取数据花费的时间可以分为寻道时间、旋转延迟、传输时间三个部分,
    a)·寻道时间:磁臂移动到指定磁道所需要的时间,主流磁盘一般在5ms以下; b)旋转延迟:就是我们经常听说的磁盘转速,比如一个磁盘7200转,表示每分钟能转7200次,也就是说1秒钟能转120次,旋转延迟就是1/120/2 = 4.17ms; c).传输时间:指的是从磁盘读出或将数据写入磁盘的时间,一般在零点几毫秒,相对于前两个时间可以忽略不计。
    (看过一篇很详细文章:http://wdxtub.com/2016/04/16/thin-csapp-3/)

那么访问一次磁盘的时间,即一次磁盘IO的时间约等于5+4.17 = 9ms左右,听起来还挺不错的,但要知道一台500-MIPS(Million Instructions Per Second每秒百万指令数)的机器每秒可以执行5亿条指令,因为指令依靠的是电的性质,换句话说执行一次IO的时间可以执行40万条指令,数据库动辄十万百万乃至千万级数据,每次9毫秒的时间,显然是个灾难。

所以,结论:减少操作系统I/O交互的次数。

(每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO)

三.什么是索引:

在数据库系统的使用过程当中,数据的查询是使用最频繁的一种数据操作。

        最基本的查询算法当然是顺序查找(linear search),遍历表然后逐行匹配行值是否等于待查找的关键字,其时间复杂度为O(n)。但时间复杂度为O(n)的算法规模小的表,负载轻的数据库,也能有好的性能。  但是数据增大的时候,时间复杂度为O(n)的算法显然是糟糕的,性能就很快下降了。

       好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)、二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

四.MySQL的B-Tree索引(技术上说B+Tree)

好,本篇的核心来了!

在 MySQL 中,主要有四种类型的索引,分别为: B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。我们主要分析B-Tree 索引。( B:balace 平衡之意,并非binary tree 二叉树)

1.详解b+树数据结构

527.png

上图,是一颗b+tree,(innodb引擎下的,与myisam引擎下的B+结构又不一样,说白了就是聚簇索引与非聚簇索引的区别,详细见:

Mysql-聚簇索引

浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示,范围: [(M/2)-1, M-1] M为总数据)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非叶子节点只不存储真实的数据(B+的特点),只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。

viable viable

基于GPT-4的AI非结构化数据分析平台

viable 87 查看详情 viable

2.B+树的查找过程

如图所示,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。

真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。

(疑问???,如上所述,INNOBD的B+树是聚簇索引类型的,真实数据与索引叶子节点放在一起,那么问题来了,我弱有多个索引,难不成每个索引下边都存储有数据??那岂不是浪费磁盘存储?若不是的话,我猜测是使用指针指过去的吗,怎么用数据结构来表示一下??)

答:每张表只能有一个聚集索引,可以有多个辅助索引。辅助索引也就是次索引,在根节点会存储的不是数据而是一个指针指向存储数据的主索引。

3.b+树性质

1). 通过上面的分析,我们知道IO次数取决于b+数的高度h,假设当前数据表的数据为N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N一定的情况下,m越大,h越小;而m = 磁盘块的大小 / 数据项的大小,磁盘块的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度h越低,I/O也就少。这就是为什么每个数据项,即索引字段要尽量的小。

举个反面教材,比如int占4字节,要比bigint8字节少一半。这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,一旦放到内层节点,磁盘块的数据项会大幅度下降(原理见上边二),导致树增高。当数据项等于1时将会退化成线性表。如下:

528.png

如果是左边的结构,I/O次数为三次;如果是右边的线性表,I/O次数为6次,很明显嘛IO变多了

映射两个结论:

1.要设置成索引的字段len要小;

2.做联合索引时,联合的字段个数也要少

2).当b+树的数据项是复合的数据结构(多列索引),比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的。

比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。

比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。

映射两个结论:

1.最左匹配特性,联合索引是从左往右读的

2.如果有了多列索引,那么从左往右一次的索引不需要建立 (a,b,c) 那么 (a),(a,b)就不用建立了

3. 更多结论 : Mysql-索引总结 http://blog.csdn.net/ty_hf/article/details/53526405

以上就是 Mysql-索引数据结构的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/802419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月26日 18:38:05
下一篇 2025年11月26日 18:43:44

相关推荐

  • 虚拟币排行榜20名最新2025年 10月数字货币前20榜单

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 2025年10月,数字货币市场预计将呈现更加多元和成熟的格局。本榜单基于当前技术演进、生态系统建设、市场应用和社区共识进行前瞻性预测,旨在揭示那些可能在未来市场中占…

    2025年12月9日
    000
  • 什么是跨链桥?如何将资产从一条链转移到另一条链?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 跨链桥是一种连接独立区块链的“桥梁”,它允许用户将资产或数据从一个区块链网络(如以太坊)安全地转移到另一个网络(如Solana),解决了不同链之间的孤岛问题,极大地…

    2025年12月9日
    000
  • 什么是“创世区块”?它对比特币有什么特殊的意义?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 创世区块,又称区块0,是比特币区块链中第一个被创建的区块。它由中本聪在2009年1月3日创建,是整个比特币系统的基石,所有后续区块都直接或间接地链接到它,犹如一部史…

    2025年12月9日
    000
  • 中心化交易所(CEX)与去中心化交易所(DEX)对比

    在数字资产交易的广阔天地中,中心化交易所(cex)和去中心化交易所(dex)是两种主流的平台类型,它们各自拥有独特的优势和局限性。理解两者的核心差异,对于投资者来说至关重要,因为它直接影响到交易的安全性、便捷性以及所能提供的资产种类。本文将深入探讨cex和dex的运作机制、特点以及它们在实际应用中的…

    好文分享 2025年12月9日
    000
  • 美联储10月降息概率达99%,加密市场迎来政策关键周

    美联储降息预期达99%叠加SEC批准加密ETP新规,美元走弱与监管明确化推动资产重配,黄金、美股成长板块及加密货币迎来利好,机构加速布局数字资产,市场进入流动性宽松与制度创新共振的新阶段。 2025年10月的第三周,全球金融市场正屏息凝视,等待一个几乎确定无疑的货币事件——美联储的再次降息。根据CM…

    2025年12月9日
    000
  • 如何查看比特币交易记录_查询比特币交易记录的步骤

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 查询比特币的交易记录是了解资金流向和确认交易状态的关键一步。由于其网络的公开透明特性,任何人都可以通过使用区块链浏览器轻松追踪任何一笔交易的详细信息。 一、准备查询…

    2025年12月9日
    000
  • 交易所:加密货币交易的核心平台

    在数字经济浪潮中,加密货币以其去中心化、透明可追溯的特性,正逐步重塑全球金融格局。作为连接用户与加密世界的桥梁,加密货币交易所扮演着至关重要的角色。它们不仅是数字资产买卖流通的场所,更是价值发现、风险管理、生态建设的核心驱动力。面对琳琅满目的交易所,如何选择一个安全可靠、功能强大、服务优质的平台,成…

    好文分享 2025年12月9日
    000
  • 2025年10月底可能暴涨的币有哪些

    评估潜在暴涨币种的关键因素 在探讨2025年10月底可能暴涨的币种之前,理解评估加密货币的关键因素至关重要。这些因素帮助我们筛选出那些具有真正潜力的项目,而不是盲目追逐短期热点。 技术创新与应用场景: 一个具有颠覆性技术和广泛应用场景的项目,其成功的可能性更大。例如,解决了现有区块链痛点(如扩容、隐…

    好文分享 2025年12月9日
    000
  • 比特币到底是谁发明的?中本聪与区块链起源

    Binance币安 欧易OKX ️ Huobi火币️ 比特币的发明者是中本聪(Satoshi Nakamoto),这是一个化名,真实身份至今未知。2008年11月1日,中本聪在互联网上发表了一篇题为《比特币:一种点对点的电子现金系统》的白皮书,系统性地阐述了比特币的运行机制。这篇论文不仅提出了比特币…

    2025年12月9日
    000
  • 币安Alpha10月20日上线项目SVSA介绍

    Binance币安 欧易OKX ️ Huobi火币️ SVSA 是 Kaia 生态的重点游戏项目,估值高达五千万,背靠日韩双巨头,预计16:00上线 Alpha,上线平台不多,大概率会走单机拉盘路线。 项目简介:SVSA 是一款由 KaiaChain 支持、登陆 LINE DApp 平台的 Web3…

    2025年12月9日
    100
  • MEME币、AI币、GameFi项目怎么选?

    Binance币安 欧易OKX ️ Huobi火币️ 选什么类型的币,其实取决于你自己的目标和风险偏好。MEME币、AI币、GameFi项目各有特点,不能一概而论哪个最好,关键看你怎么理解和参与。 MEME币:情绪驱动,快进快出 MEME币的核心不是技术或应用,而是共识和热度。它的涨跌往往跟社交媒体…

    2025年12月9日
    100
  • 彭博社特稿:币安(BINANCE)劲敌,一文读懂 Hyperliquid 如何成功抢占市场份额

    由少数工程师团队打造的匿名去中心化交易所hyperliquid,在短短两年间已吸引重量级投资者并实现千亿级交易量。该平台专注于永续合约交易,永续合约是一种无到期日的合约,占据加密货币投机市场主导地位,月交易量超6万亿美元。 Binance币安 欧易OKX ️ Huobi火币️ 虽与行业龙头币安规模悬…

    2025年12月9日
    000
  • 币安劲敌: Hyperliquid 如何成功抢占市场份额,一文详解

    由少数工程师团队打造的匿名去中心化交易所hyperliquid,在短短两年间已吸引重量级投资者并实现千亿级交易量。该平台专注于永续合约交易,永续合约是一种无到期日的合约,占据加密货币投机市场主导地位,月交易量超6万亿美元。 Binance币安 欧易OKX ️ Huobi火币️ 币安劲敌: Hyper…

    2025年12月9日
    000
  • 买币后要不要卖?现货持仓心态与策略分享

    Binance币安 欧易OKX ️ Huobi火币️ 买了币之后当然要卖,关键是怎么卖、什么时候卖。很多人只想着“抄底”,却没想好“退出”,结果牛市赚的利润又全吐回去,甚至变盈为亏。真正的交易闭环,是买和卖同样重要。 别信“永远持有”,盈利后卖出才是成熟心态 市场里流传着“HODL”文化,但现实是:…

    2025年12月9日
    000
  • 2025年代币回购详细汇总:总额超14亿美元 前10项目占92%

    Binance币安 欧易OKX ️ Huobi火币️ 2025 年哪些代币的回购规模最大?Coingecko 近期汇总了各项目代币回购的数据,列出了按美元价值计算,28 种代币回购支出排名。以下为内容详情。 Hyperliquid 是今年迄今为止回购规模最大的代币,其援助基金迄今已花费超过 6.44…

    2025年12月9日
    000
  • 柴犬币(SHIB)是什么?SHIB未来前景、价格预测及购买方法

    shiba inu coin(shib)是一种基于以太坊的去中心化加密货币,由匿名开发者“ryoshi”于 2020 年 8 月创建。 Binance币安 欧易OKX ️ Huobi火币️ 柴犬币(SHIB)于2020年8月以1 SHIB约合0.00000000051美元(51亿分之一美元)的超低价…

    2025年12月9日 好文分享
    000
  • David Bailey深度分析:投资者越来越善于识别糟糕的比特币(BTC)财库

    Binance币安 欧易OKX ️ Huobi火币️ 一位比特币财库企业的高管指出,随着市场对“比特币囤积型公司”的追捧热度逐渐降温,投资者正以更严格的标准审视这类企业。 目前全球已有205家上市公司公开披露其持有比特币作为资产储备。然而,这些公司的吸引力正在减弱,部分采用该策略的企业在过去几个月中…

    2025年12月9日
    000
  • Kaito(KAITO) 币是什么?为什么需要InfoFi?KAITO代币经济学、优劣势介绍

    在资讯爆炸的时代,每天都有成千上万的内容涌向我们。社群、新闻、论坛、广告,信息满天飞,但真正有价值的资讯却常常被淹没。对于刚踏入web3 的人来说,这种「资讯焦虑」更是家常便饭。 Binance币安 欧易OKX ️ Huobi火币️ Kaito 的出现,就是为了解决这个问题。它希望通过AI 技术+ …

    2025年12月9日 好文分享
    000
  • Snorter Token (SNORT) 币是什么?SNORT特点、优势、增长潜力及未来前景

    最近,一个项目在表情包币市场掀起了波澜:snorter token ($snort)。它之所以受到投资者的关注,不仅因为它是一款基于幽默或表情包的代币,还因为它旨在与现实世界的交易机器人集成。本文将探讨 snorter token 的基本概念和功能,它与竞争项目的区别,以及它未来的价格前景。 Bin…

    2025年12月9日
    000
  • MegaETH 估值博弈:入场良机还是风险临近?一文了解

    Binance币安 欧易OKX ️ Huobi火币️ MegaETH 以「实时区块链」的技术突破与社区共筑的生态理念,成为加密市场的焦点项目。 当以太坊生态仍在为性能瓶颈挣扎时,MegaETH 以「10 万 TPS + 毫秒延迟」的技术宣言重塑 Layer 2 赛道的想象边界。 从早期 Vitali…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信