当前位置: 首页 > 科技观察

数据库索引的实际工作原理

时间:2023-03-19 01:25:25 科技观察

数据库具有有组织的数据存储功能。存储具有放置数据的特定结构。每种数据库类型都有自己的数据存储格式。它们针对特定用例进行了调整和优化。在下面的示例中,我们有一个包含有关汽车信息的数据库:>包含汽车的数据库表示例看起来不错,并且很容易浏览它。但是你有没有问过自己数据是如何存储的?内部存储每个数据库都在内部存储在应用了特定编码和格式的文件中。为简单起见,我们假设一个由CSV文件支持的数据库。它是这样的:ID,Brand,Model,Color,Price1,Ford,Focus,Grey,420002,Toyota,Prius,White,405003,BMW,M5,Red,600004,Audi,A3,Black,380005,Toyota,Camry,White,515006,VW,Golf,Grey,32000都很简单。只用六个条目进行查找不是问题。你能想象你有100,000个条目吗?浏览文件会变得非常慢。查询时间与文件大小成比例地增加。当我们知道数据库会随着时间增长时,我们需要找到解决方案。索引在这里救援。数据库索引数据库索引是一种用于加速检索数据操作的数据结构。它是什么样子的?如果我们需要通过ID6从我们的表中检索一辆汽车,直接跳到相应的行而不经过其余的循环会更快。这就是索引的主要思想。我们还需要将偏移量保存到各个条目。最简单的方法是保留散列中每个条目的偏移量。键是我们要索引的列的值(在本例中,它是ID列)。散列值是数据库文件中的偏移量。对于ID=1,偏移量为0。对于ID=2,偏移量为24。它看起来像这样:哈希索引{1:0,2:24,3:51,4:70,5:92,6:118}1=>{0}-------->1,Ford,Focus,Grey,420002=>{24}-------->2,Toyota,Prius,White,405003=>{51}-------->3,BMW,M5,Red,600004=>{70}-------->4,Audi,A3,Black,380005=>{92}-------->5,Toyota,Camry,White,515006=>{118}-------->6,VW,Golf,Grey,32000添加索引后,通过ID查询汽车,返回结果会更快。检索请求进入哈希索引并获取相应ID的偏移量。然后它开始从必要条目中的偏移量完全读取数据库文件。索引是实现唯一性约束的正确方式。当你想保证一列中的值是唯一的时,你需要在该列上建立索引。否则,每次插入操作都会卡住检查新数据是否已经存在。也可以有多个索引。如果我们需要任何其他列的快速查询,我们还会添加一个索引。比如我们可以按颜色添加,查询Express的索引。但是每一个新的索引都会给数据库带来额外的成本。索引开销首先,每个索引散列都需要额外的内存。我们添加的索引越多,使用的内存就越多。重要的是要记住只在经常查询的列上添加索引。否则,索引每一列会消耗大量内存。其次,对于快速读取操作,写入操作会稍微慢一些。每次我们向表中添加一个条目时,我们还必须在哈希索引中创建一个项目。类似的情况适用于更新或删除数据。这是我们必须处理的权衡。总结数据库索引是增强读取查询的好方法。唯一约束需要索引列。每个新索引都会消耗更多内存。添加索引会影响写入和更新操作。这就是简单的哈希索引的工作原理。还有许多其他使用数据库索引的方法,例如排序字符串表或B树。他们使用更复杂的逻辑和优化的结构来获得更好的性能结果。但是,保存偏移量的思路还是一样的。通过正确使用索引,您可以将数据库提升到一个新的水平。