首页 新闻 会员 周边 捐助

能具体讲讲数据库中的索引吗

0
悬赏园豆:10 [待解决问题]

之前在书上看到,大致意思是索引上存储到到表中的一列数据,根据rowid就很快查询到需要的数据。但是并不是很能理解。索引是跟表独立的吗,索引能很快查询到?还是说因为存在索引,所以不会进行全表扫描?还是说怎么?
索引这块看着有点懵

王不听的主页 王不听 | 初学一级 | 园豆:192
提问于:2021-07-02 17:03
< >
分享
所有回答(5)
0

看看Dictionary 或者hashmap的实现,一个道理。原则上多一个硬盘定位读写。

花飘水流兮 | 园豆:13617 (专家六级) | 2021-07-05 09:53
0

1.索引跟表是独立的

2.索引可以很快查到

3.进不进行全表扫描看你设置的索引

这是一个索引解析,有时间再看看索引解析文档,一次性理清楚后续工作就不容易出错了

https://www.imooc.com/article/11725

三块冰- | 园豆:430 (菜鸟二级) | 2021-07-05 18:00
1

你缺少了一个基本知识点

所有的查找优化算法都是基于有序序列.
对无序数据的唯一查找方法,就是遍历.

什么是有序?索引.
什么是无序?没有索引

吴瑞祥 | 园豆:29449 (高人七级) | 2021-07-06 12:18
0

 InnoDB,聚簇索引 = 索引 + 数据

 MyISM,普通索引 = 索引

renguanyu | 园豆:841 (小虾三级) | 2022-04-24 13:39
0

本质的意思是这样的,直接寻址和间接寻址的概念,
当你知道rowid时,若是线性存储,那么只需要查询一次,即根据地址,直接在数据文件中查询,所以会非常快。
当索引和表不是分开存储的,例如mysql的IOT时,索引和数据是同一个文件,都是B+ tree,都知道tree在底层就是链表,而一个tree查询多少次,取决于它的树的深度,例如最常见的3层tree结构,它需要三次查询。
这个其实很好理解,假设外卖员拿到的地址是顾客地址,那么直接送餐就结束了。但是现在告诉你它不是点餐的顾客,外卖员找到的时候,又告诉你一个地址,你跑了两趟,乃至有可能更多。
为什么不存在全表扫描,因为在Oracle的索引中存储了数据文件的地址,当找到rowid时,相当于得到了某一条数据的地址,所以不用全表扫描。
后续的概念可以参考操作系统书籍,当查询次数越多时,产生的缺页概率也越大,这就导致非常慢。

蜗牛旅行1899 | 园豆:285 (菜鸟二级) | 2024-05-20 17:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册