文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据库索引实际上是如何工作的

2024-12-03 10:39

关注

数据库具有组织化的数据存储功能。存储具有用于放置数据的特定结构。每种数据库类型都有其自己的用于存储数据的格式。针对特定用例对它们进行了调整和优化。在下面的示例中,我们有一个包含汽车信息的数据库:

 

 

> Example of a database table with cars

看起来很好,很容易浏览它。但是你有没有问过自己的数据是如何存储的?

内部存储器

每个数据库都内部存储在文件中,并应用了特定的编码和格式。为简单起见,让我们假设一个数据库由CSV文件支持。它是这样的:

ID,Brand,Model,Color,Price

1,Ford,Focus,Grey,42000

2,Toyota,Prius,White,40500

3,BMW,M5,Red,60000

4,Audi,A3,Black,38000

5,Toyota,Camry,White,51500

6,VW,Golf,Grey,32000

这一切都很简单。用只有六个条目进行查找不是问题。你能想象你有100,000个条目吗?经过文件会变得非常慢。查询时间与文件的大小成比例地增加。当我们知道数据库会随着时间的推移而增长时,我们需要找到一个解决方案。

在这里索引到救援。

数据库索引

数据库索引是一种数据结构,用于加快检索数据的操作。它是什么样子的?

如果我们需要通过ID 6从我们的表中检索一辆汽车,则直接跳到相应的行时会更快地跳转,而不会通过其余循环。这是索引的主要思想。我们还需要保存指向各个条目的偏移量。

最简单的方法是保留哈希中每个条目的偏移量。关键是我们要索引的列的值(在此示例中,它是ID列)。哈希值是数据库文件中的偏移量。对于ID = 1,偏移量为0。对于ID = 2,偏移量为24。它看起来像这样:

Hash Index {1:0, 2:24, 3:51, 4:70, 5:92, 6:118}

1 => {0} ---------> 1,Ford,Focus,Grey,42000

2 => {24} ---------> 2,Toyota,Prius,White,40500

3 => {51} ---------> 3,BMW,M5,Red,60000

4 => {70} ---------> 4,Audi,A3,Black,38000

5 => {92} ---------> 5,Toyota,Camry,White,51500

6 => {118} ---------> 6,VW,Golf,Grey,32000

添加索引后,通过ID查询汽车将返回结果更快。检索请求进入散列索引,并占用相应ID的偏移量。然后它开始在必要的条目中完全从偏移量读取数据库文件。

索引是实现唯一性约束的正确方法。当您想要保证某个列中的值是唯一的,则需要列上的索引。否则,每个插入操作都会卡住检查新数据是否已存在。

也可以具有多个索引。如果我们需要通过任何其他列快速查询,我们也会添加一个索引。例如,我们可以通过颜色添加颜色和查询快车的索引。但每个新索引都会为数据库带来额外的成本。

索引开销

首先,每个索引哈希都需要额外的内存。我们添加的索引越多,将使用更多的内存。重要的是要记住仅在经常查询的列上添加索引。否则,对每一列建立索引将消耗大量内存。

其次,对于快速读取操作,写入操作会略微慢。每次向表添加条目时,我们也必须在哈希索引中创建一个项目。类似的情况适用于更新或删除数据。这是我们必须处理的权衡。

总结

这就是简单的哈希索引的工作方式。还有许多其他使用数据库索引的方法,例如排序字符串表或B树。他们使用更复杂的逻辑和优化的结构来获得更好的性能结果。

但是,保存偏移量的想法保持不变。通过正确使用索引,在使用数据库时,您将可以达到一个新的水平。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯