Skip to content

数据库索引初探

当大家还是一个新人,在面试的时候都被问过什么是数据库索引,为什么要用数据库索引,索引是如何实现的等等一系列问题。
随便上网查一下就能得到上面一系列问题的答案。但是却总感觉对索引这个概念朦朦胧胧的,不是十分清晰和深刻,似乎没有抓住其中的实质。

就像我们虽然懂得很多道理,依旧过不好这一生一样,因为我们只是懂,并没有体会。

直到我看了一篇有关数据库的小文章之后,对索引大彻大悟。
现在让我们抛开所掌握的的数据库知识,如果让我们自己来实现一个数据库,应该怎样做呢。
首先我们知道数据需要保存在文件里。然后考虑为了方便读取,最好固定每条数据的长度,比如每条数据长800字节,那么第5条数据开始位置就在3200字节处。
现在我们要考虑查询的问题。我们根据主键查询数据,如果一条一条比对数据主键的话,查询的时间复杂度就是O(n),太慢太慢。
所以我们为了提高效率,如何来储存数据呢?树!我相信大家略懂数据结构和算法的话,对二叉树和B树都不陌生。B树每一层所存储的数据更多,所以可以减少硬盘读取次数,更加适合储存数据。
我这里就不细讲树的结构和特点了。

最后就要考虑这个问题了,我们刚刚根据主键建立的树,如果根据其他字段查找,又要遍历了。所以这时候我们可以用某个字段当做关键字建立一个树,储存其所在的物理位置。
这便是索引了。

当然,数据库还应该有很多功能和特性,比如事务,表的连接,sql语言等等。我们这里就不继续讨论了。

我相信通过我引导的一步步走来,大家理解了索引的起源和初衷。就像看到一个小孩子一步步成长一样,一切都那么自然。不想突然去熟悉一个陌生人那般尴尬。至于索引的具体实现以及原理等等,大家可以查看其它文章,相信不再没有头绪。

知其然知其所以然。

Published inDataBase

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注