98年JAVA程序员日常分享 | 索引怎么提高检索速度

作者: 努力成为JAVA程序媛分类: 职业职场 发布时间: 2024-05-04 15:08:01 浏览:613 次

98年JAVA程序员日常分享 | 索引怎么提高检索速度

请输入提交昵称:
数据库将数据分成页,每一个页都有数据页,数据页有索引和数据。怎么通过索引优化查询?就是通过将数据页变成结构b+树,键就是索引,值就是数据,你可以看看b+树结构就知道。会大大减少查询 还有聚簇索引和非聚簇索引,你可以看看。

【回复】键是索引,值是数据。这个好像有点不太对。索引是一种数据结构,通常采用的是B+树这种数据结构,似乎没有键值的说法。聚簇索引的叶子结点体现的是索引即数据,数据即索引。
Adrian-Elizabeth:
如果UP真想了解底层,感觉得补数据结构的知识。

【回复】回复 @守护神兽佛 : 不是说Redis不快,感觉我们也不可能将MySQL数据库中所有的信息存入Redis中,查询频繁的放入缓存才合理,但偶尔查询一些不频繁的数据,是不是索引还是必要的。基于内存的Redis也不太可能装下MySQL数据库中庞大的数据。我是这么理解的。
【回复】用redis才快,比一般的快上千倍,效率甚至比分布式要高,安全性也高
工具男2578:
黑马程序员的课你要多刷。索引会吧数据改成b+树的结构,千万级数据只需要检索4次检索。是索引空间换时间

蟹黄堡的秘方在这里:
b+树我就当做目录理解的,虽说不是很准确

lU_李知恩:
八股文里有,不是得天天背的吗?不背面试都过不了

Adrian-Elizabeth:
其实举目录的例子挺好的,如果没有目录,查字典你得一页一页翻,就拿英文字典来说,单词city,通过目录可以快速定位到c开头的页码,然后查找,如果没有目录,那不得从第一页开始翻。索引也是为了减少查找的次数

Adrian-Elizabeth:
UP可能是看了尚硅谷老师讲的MySQL视频,但没有看完后面索引推演的部分,老师讲得很详细。我看完后,对于索引能够提高检索速度,浅显的理解是,MySQL中的表大多采用InnoDB存储引擎,存储引擎负责对表中数据的进行增删改查操作。InnoDB将表中的数据划分为若干个数据页,每个数据页有好几条行的数据。表中数据在磁盘上也是被相应的划分成了一个数据页一个数据页的,存储引擎处理数据需要将磁盘上的数据加载到内存中。如果没有索引,那么将表中数据分成了多少个数据页就得加载多少次IO。InnoDB存储引擎的索引结构是B+树,树中的节点都是一个个数据页,每个叶子节点要么存储整列的数据记录(聚簇索引),要么存储索引列加主键列的数据记录(非聚簇索引),每个非叶子节点存储的是子节点中索引列最小值以及子节点的地址信息。一般B+树的高度不会超过4,存储引擎可能一开始会将根节点对应的数据页从磁盘加载到内存,然后根据要查找的值,加载它的叶子节点对应的数据页,直到叶子节点。这种方式在大数据量的表中,会显著减少IO次数。具体的还是看尚硅谷老师讲的吧,老师讲得真心不错。

rabbitcch:
举个简单的例子,文件夹 a/b/c/d ,想要到d文件夹,正常的情况是把a文件夹遍历完,再把a一下二级文件夹遍历完,三级遍历完,都遍历完了做,在做匹配,有索引了,就不用遍历了直接一步到位,你说的那个是物理存储的真实字节地址,比如123456788521 第8位是存储的什么,把硬盘想成100位的字符串数组,第50位就是他的地址,至于第50位存什么看自己

菜师傅9:
真挺难得,我一开始也不理解,现在算是理解了吧,其实和计算机底层原理有关,就是信息是怎么存储的有关 ,有顺序存储什么随机存储,我才mysql的这个索引应该是随机存储,就是不能像数组那样,一下到位,底层是b+树,就是数据都有大小,按照大小顺序找比较快,当然为什么不是像数组那样直接就找到, 可能是费空间吧,我猜的

今天也要好好工作 程序员 编程 码农 互联网 Java 必剪创作

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读