Rosmontis&迷迭香的博客&鹤望兰分部

Rosmontis&迷迭香的博客
僅用於Bing訪客使用,若需要最新的文章,建議訪問rosmontis.com
  1. 首页
  2. 正文

什么是数据库索引

2022年5月7日 9点热度 0人点赞 0条评论

前言

数据库索引?什么是数据库索引?在维基百科中是这样写的:数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。简单来说,数据库索引就像书籍的目录一样,可以提高查询的效率,接下来我们就一起仔细分析下数据库的索引是什么样的,以及MySQL数据库有哪些索引。

B+树的结构和特性

众所周知,如果我们想要在一堆数据中查询一个数据,那么时间复杂度最低只需要O(logN),也就是使用二分查找,而二分查找的前置条件就是数据需要有序,而想要在一个数据流(不断地有输入的数据)中,我们联想一下十大排序,我们很轻松的可以得出,堆排序是最合适的,而堆排序的底层就是树形结构。

说了这么多,其实主要就是想说在数据流中查找一个数据最好的存储数据的数据结构就是树形结构。

说到树形结构,我们可以很快想到:平衡排序树、红黑树、前缀树等等。那么哪一种树型结构最适合用在数据库的存储数据上呢?首先我们可以确定我们一定要选用平衡树,因为平衡树可以避免一个查询过多的落在最长的那个分支上,比如下图的6号结点。

确定了平衡树的话,那我们用红黑树可不可以?我们首先思考下,数据库的数据都是存在硬盘上的,如果想要从硬盘上读取一个数据,我们需要哪些步骤?首先硬盘想要读取一个数据必须先要寻道,让磁盘的指针寻找到数据的位置,然后再将数据所在的数据块读取到内存中,然后才算是读到了数据。

如果采用红黑树的话,如果一个表有十万行数据,那么红黑树的层高就是17层(2^17 > 10万),那么如果我想查一个数据,那就需要寻道17次,进行17次io,那么这个时间成本要在毫秒级别了,显然是不可接受的。

那么红黑树不适合数据库存储,有没有其他的数据结构呢?当然有了,前辈们根据磁盘存储的这种特性,发明出一种新的数据结构叫做B+树专门用来作为数据库索引的数据结构。接下来我们就聊一聊B+树的结构和特性。

首先是说一下B+树的结构特点:

  1. B+树是一个平衡树
  2. B+树一个节点的大小等于硬盘上一个数据块的大小
  3. B+树一个结点可以有多个子结点
  4. B+树只有最底层的叶子结点存储数据
  5. B+树最底层的叶子结点是由双向循环链表构成

根据上面描述的结构特点,我们的B+树最后的结构如下图所示:

接下来我们就来说说为什么B+树是这样子的。

  • B+树为什么要设计成平衡树?平衡树可以很好的避免前文提到的大量查询落在一个很长的树分支上,降低最坏情况下的时间复杂度。
  • B+树的结点大小为什么等于硬盘上数据库的大小?因为硬盘即使每次只读取一个字节的数据,也是将硬盘上的一块数据读入内存,所以将结点大小设计成硬盘快大小可以更好的利用硬盘空间,在一个结点中存储多个数据,这样也可以降低树的高度从而减少读取磁盘的次数,提高效率。
  • B+树为什么一个结点要有多个子结点?因为B+树一个结点含有多个值,多个值有多个区间,所以需要一个结点指向多个子节点。
  • B+树为什么只有最底层的叶子结点存储数据?因为数据一般是比较大的,如果在中间的结点中存储数据,可能一个节点只能有很少的叶子结点,这样反而增加了树的高度,增加了IO的次数,降低了查询的效率。
  • B+树最底层的结点为什么是由双向循环链表构成?因为最底层存储的是数据,我们在查询数据的时候很多时候都是查询一个范围,比如id>10的数据,底层是双向链表就可以大大优化这种范围查询的效率,因为我不需要一个个查询来判断这一个数据的id是不是大于10,我只需要找到第一个大于10的数据,然后返回这一行数据后面的所有数据即可,同样也是为了提高效率。

聚簇索引和非聚簇索引

聚簇索引和非聚簇索引其实说的是数据和索引的存储方式,聚簇索引和非聚簇索引的底层结构都是B+树。

聚簇索引是在数据库中将数据放在索引的B+树的叶子节点上,而非聚簇索引则是将指向数据的指针放在叶子节点上。这就造成了检索方式上的区别,通过聚簇索引,我们可以直接定位数据块的位置,所以聚簇索引具有唯一性,只能有一个聚簇索引,同时聚簇索引的索引和数据行在物理结构上是一致的,数据行按照一定顺序排序,并且自动维护这个顺序;非聚簇索引我们只能知道指针,我们在通过指针进行查找数据。

聚簇索引也带来一个坏处就是因为只能有一个聚簇索引,所以其他索引就只能在叶子结点存储聚簇索引的值,然后在通过值在聚簇索引中查找,从而找到数据的位置。

联合索引

联合索引是将多个列联合起来作为一个索引,比如我们将A、B、C三个列创建一个联合索引,那么相当于创建了A、AB、ABC三个索引,所以联合索引在搜索的时候是最左匹配原则,也就是说,匹配上A,然后在匹配B,然后再匹配C。也是因为联合索引的这种机制,所以联合索引在一些特殊情况下会失效,比如:

  • 未使用最左匹配。
  • where语句后存在OR条件。因为联合索引的匹配规则是先匹配A然后再匹配B,所以一旦存在了OR,比如A = 1 or B = 2,这个条件在A != 1 && B == 2的情况下也是合法的,但是他没有匹配到A = 1,所以就无法使用联合索引。
  • like以%开头。like以%开头强调的是模糊前缀匹配,所以也没办法走联合索引。
  • where中索引列有运算
  • where中索引列使用了函数
  • 如果mysql觉得全表扫描更快
标签: 暂无
最后更新:2022年6月7日

Rosmontis

这个人很懒,什么都没留下

点赞

文章评论

取消回复

Rosmontis

这个人很懒,什么都没留下

本站文章约1个月与rosmontis.com同步一次

链接可将rosmontis.net改为com查看更多内容

最新 热点 随机
最新 热点 随机
【拉环社】【Onedrive】仰望夜空的星辰Fine Days/抬头看看吧,看那天上的繁星Fine Days(FD)完整汉化+全CG(4.9GB) 【拉环社】【Onedrive】仰望夜空的星辰IF/抬头看看吧,看那天上的繁星IF -Interstellar Focus-(FD)完整汉化+全CG(2.8GB) 【漩涡社】鲸神的提亚斯提拉/鲸神的Tearstilla 鯨神のティアスティラ 完整汉化+全CG(3.2GB) 【拉环社】【Onedrive】仰望夜空的星辰/抬头看看吧,看那天上的繁星(本作) 见上げてごらん、夜空の星を 完整汉化+全CG(6.5GB) 【SAGA PLANETS】【Onedrive】FD:金色loveriche-金色时光- 金色ラブリッチェ -Golden Time- 完整汉化+全CG(5.5GB) 【SAGA PLANETS】【Onedrive】金辉恋曲四重奏/金色Loveriche 金色ラブリッチェ 完整汉化+全CG(5.6GB) 【Onedrive】娇蛮任性HIGHSPEC ワガママハイスペック 完整汉化(7.2GB) 【Alcot】【Onedrive】FD:将军大人芳华正茂 Fandisc 将軍様はお年頃 ふぁんでぃすく -御三家だヨ!全員集合- 完整汉化+全CG(3.0GB) 【Alcot】【Onedrive】将军大人芳华正茂/将军大人风华正茂 将军様はお年顷 完整汉化+全CG(4.20GB) 国产动画《京剧猫》,被运营耽搁的好动画,哀其不幸怒其不争! 【Onedrive】架向星空之桥AA 架向星空之桥FAN DISC 星空へ架かる桥AA 完整汉化(3.6GB) 【Onedrive】架向星空之桥 星空へ架かる桥 完整汉化(4.3GB) 【颜艺社】【Onedrive】寄宿之恋 かりぐらし恋爱 完整汉化+全CG(2.7GB) 【八月社】【Onedrive】秽翼的尤斯蒂娅 秽翼のユースティア 完整汉化(4.7GB) 【橘子社妈妈累】【Onedrive】回家之前的棉花糖 お家に帰るまでがましまろです 完整汉化+全CG(5.8GB) 【SAGA PLANETS】【Onedrive】花之天使的夏日恋歌 フローラル・フローラブ 完整汉化+全CG(3.7GB) 【音符社】【Onedrive】花与乙女的祝福+花与乙女的祝福 皇家花束 完整汉化(共3.9GB) 【2022.06更新】【Onedrive】最全!花吻在上/亲吻那片花瓣 その花びらにくちづけを 1~20本作+3番外共23作 完整汉化(约10.5GB) 【Onedrive】花色温泉乡/花色七芒星 花色ヘプタグラム 完整汉化(3.6GB) 【CRYSTALIA】红月摇曳的恋之星火SS 与旭同往~来自盛夏的某日~ 旭とワンルーム ~とある夏の一日~ 完整汉化+全CG (550MB) 【CRYSTALIA】红月摇曳的恋之星火SS 与红叶同住 ~来自盛夏的某日~ 紅葉とワンルーム ~とある夏の一日~ 完整汉化+全CG (580MB) 【CRYSTALIA】红月摇曳的恋之星火 紅月ゆれる恋あかり 完整汉化+全CG (2.5GB) 【Onedrive】FD:景之海的艾佩莉亚 ~卡萨布兰卡的骑士~ 景の海のアペイリア ~カサブランカの騎士~ 完整汉化+全CG(2.3GB) 【Onedrive】景之海的艾佩莉娅/海景的艾佩利雅 景の海のアペイリア 完整汉化+全CG(3.0GB) 【柚子社】【Onedrive】管乐恋曲!~The bonds of melody~ ぶらばん! ~The bonds of melody~ 完整汉化(3.0GB) 【Onedrive】【妹抱FD】哥哥,早上起床之前都要抱紧我哦!晚上睡觉之前学更多Java吧!完整汉化+全CG(4.4GB) 【Onedrive】哥哥,早上起床之前都要抱紧我哦!(妹抱)お兄ちゃん、朝までずっとギュってして!完整汉化+全CG(7.0GB) 【SLG】夏日狂想曲:乡间的难忘回忆 【拉环社】【Onedrive】在这苍穹展翅/在这苍穹之中展开双翼 この大空に、翼をひろげてIf My Heart Had Wings 完整汉化(4.3GB) 【拉环社】【Onedrive】在这苍穹展翅-飞行日志- If My Heart Had Wings -Flight Diary- この大空に、翼をひろげて FLIGHT DIARY 完整汉化(3.0GB)
【SLG】夏日狂想曲:乡间的难忘回忆【海豹社】【Onedrive】爱之钥系列 爱之钥田园夏日 アイカギ~アフターデイズ~ 完整汉化+全CG(1.4GB)【SAGA PLANETS】【Onedrive】FD:金色loveriche-金色时光- 金色ラブリッチェ -Golden Time- 完整汉化+全CG(5.5GB)【Onedrive】娇蛮任性HIGHSPEC ワガママハイスペック 完整汉化(7.2GB)【Onedrive】骑士系列 恋骑士Purely☆Kiss 完整汉化+全CG(3.6GB)【CRYSTALIA】红月摇曳的恋之星火 紅月ゆれる恋あかり 完整汉化+全CG (2.5GB)【SAGA PLANETS】【Onedrive】金辉恋曲四重奏/金色Loveriche 金色ラブリッチェ 完整汉化+全CG(5.6GB)【拉环社】【Onedrive】仰望夜空的星辰Fine Days/抬头看看吧,看那天上的繁星Fine Days(FD)完整汉化+全CG(4.9GB)【Onedrive】FD:景之海的艾佩莉亚 ~卡萨布兰卡的骑士~ 景の海のアペイリア ~カサブランカの騎士~ 完整汉化+全CG(2.3GB)【Onedrive】景之海的艾佩莉娅/海景的艾佩利雅 景の海のアペイリア 完整汉化+全CG(3.0GB)【Onedrive】哥哥,早上起床之前都要抱紧我哦!(妹抱)お兄ちゃん、朝までずっとギュってして!完整汉化+全CG(7.0GB)【CRYSTALIA】红月摇曳的恋之星火SS 与红叶同住 ~来自盛夏的某日~ 紅葉とワンルーム ~とある夏の一日~ 完整汉化+全CG (580MB)【CRYSTALIA】红月摇曳的恋之星火SS 与旭同往~来自盛夏的某日~ 旭とワンルーム ~とある夏の一日~ 完整汉化+全CG (550MB)【Onedrive】花色温泉乡/花色七芒星 花色ヘプタグラム 完整汉化(3.6GB)【2022.06更新】【Onedrive】最全!花吻在上/亲吻那片花瓣 その花びらにくちづけを 1~20本作+3番外共23作 完整汉化(约10.5GB)【音符社】【Onedrive】花与乙女的祝福+花与乙女的祝福 皇家花束 完整汉化(共3.9GB)【SAGA PLANETS】【Onedrive】花之天使的夏日恋歌 フローラル・フローラブ 完整汉化+全CG(3.7GB)【橘子社妈妈累】【Onedrive】回家之前的棉花糖 お家に帰るまでがましまろです 完整汉化+全CG(5.8GB)【八月社】【Onedrive】秽翼的尤斯蒂娅 秽翼のユースティア 完整汉化(4.7GB)【颜艺社】【Onedrive】寄宿之恋 かりぐらし恋爱 完整汉化+全CG(2.7GB)【Onedrive】架向星空之桥 星空へ架かる桥 完整汉化(4.3GB)【Onedrive】架向星空之桥AA 架向星空之桥FAN DISC 星空へ架かる桥AA 完整汉化(3.6GB)国产动画《京剧猫》,被运营耽搁的好动画,哀其不幸怒其不争!【Alcot】【Onedrive】将军大人芳华正茂/将军大人风华正茂 将军様はお年顷 完整汉化+全CG(4.20GB)【Alcot】【Onedrive】FD:将军大人芳华正茂 Fandisc 将軍様はお年頃 ふぁんでぃすく -御三家だヨ!全員集合- 完整汉化+全CG(3.0GB)【拉环社】【Onedrive】仰望夜空的星辰/抬头看看吧,看那天上的繁星(本作) 见上げてごらん、夜空の星を 完整汉化+全CG(6.5GB)【漩涡社】鲸神的提亚斯提拉/鲸神的Tearstilla 鯨神のティアスティラ 完整汉化+全CG(3.2GB)【拉环社】【Onedrive】仰望夜空的星辰IF/抬头看看吧,看那天上的繁星IF -Interstellar Focus-(FD)完整汉化+全CG(2.8GB)【雪碧社Sprite】【Onedrive】苍之彼方的四重奏EXTRA2 DL Edition 蒼の彼方のフォーリズム EXTRA2 生肉+全CG(3.5GB)【Onedrive】爱因斯坦携爱敬上APOLLOCRISIS アインシュタインより愛を込めて APOLLOCRISIS 汉化本体+全CG(2.3GB)
最完美安装Windows子系统的方法—kali子系统和图形化桌面安装教程 用按钮触发事件的方式实现背景色的闪烁效果 WordPress 网页输出显示页面生成消耗时间,当前页面数据库查询次数或当前页面消耗内存情况 html+css实现充电水滴融合特效代码 Django-http请求处理流程剖析 使用虚拟信用卡VISA外币卡白嫖Azure两台一年云服务器以及200美元使用额度 小丛雨ヾ(≧▽≦*)o 使用虚拟信用卡VISA外币卡白嫖AWS一年免费云服务器 html+css实现响应式卡片悬停效果 【颜艺社】【Onedrive】寄宿之恋 かりぐらし恋爱 完整汉化+全CG(2.7GB) Django—Admin后台管理系统的创建与使用 【拉环社PULLTOP】【Onedrive】白熊铃星群 しろくまベルスターズ♪ 未来数位繁体中文代理版(4.3GB) Live2d网页看板娘-快把可爱的看板娘放进你的网站吧 Linux压力测试工具Apache Bench的安装和使用 【明日方舟解包】【spine】帕拉斯 贴图立绘+动态骨架文件 【SAGA PLANETS】【Onedrive】FD:金色loveriche-金色时光- 金色ラブリッチェ -Golden Time- 完整汉化+全CG(5.5GB) Mysql索引优化与性能调优 【SAGA PLANETS】【Onedrive】花之天使的夏日恋歌 フローラル・フローラブ 完整汉化+全CG(3.7GB) Django模板自定义全局变量(Template) VB修改全盘程序图标(病毒制作) Python-Django 从零开始安装搭建Django环境(详细图文) 使用阿里云邮件推送服务创建自己的域名邮箱(SMTP支持80端口发件) 机架服务器RAID阵列卡配置详解(DELL R720XD) 【音符社】【Onedrive】有少女献鸣的爱之奏章 ~愿奏章之上思念满载~ (有少女献鸣的爱之奏章FD)(2.20 GB) 详解XHTML中的标题标签与段落标签的使用 栞那 2022年GAL中毒玩家观看亲爱的弗兰克斯《DARLING in the FRANXX》有感 【海豹社】【Onedrive】爱之钥系列 爱之钥田园夏日 アイカギ~アフターデイズ~ 完整汉化+全CG(1.4GB) 【Onedrive】9-nine系列之 9-nine-春色春恋春熙风(2.9 GB) 网站被江苏反诈拦截,江苏网络访问网站被劫持跳转到js96110.com.cn

COPYRIGHT © 2022 Rosmontis&迷迭香的博客&鹤望兰分部. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang