博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试常问-数据库索引实现原理
阅读量:6420 次
发布时间:2019-06-23

本文共 1483 字,大约阅读时间需要 4 分钟。

知识内容:

1.数据库数据储存

2.数据库索引实现

 

 

 

一、数据库数据存储

1.数据库中数据存储形式

数据库中的数据均是存储在数据表中,每个数据库由不同的数据表构成,不同的表存储着不同的数据,这里以用户表为例

一个简单的用户表结构如下:

 

 

2.数据库表结构模拟

上述中的用户表用python语法结构可以简化为以下结构:

1 [ 2     { 3         "id": 1, 4         "username": wyb, 5         "password": xxxxxx, 6  7     }, 8     { 9         "id": 2,10         "username": woz,11         "password": xxxxxx,12 13     },14     {15         "id": 3,16         "username": alex,17         "password": xxxxxx,18 19     },20 ]

注:上述代码中的password字段均为xxxxxx表示密码为加密后的数据

这样的结构实现了对数据库中表结构的模拟,但是这样的结构也存在一定问题:

它是一个包含了 dict 的 list,我们要查找 id 为 n 的元素, 需要从头到尾遍历这个 list 并且比较 id

最坏的情况是 id 为 n 的这个元素根本不存在, 你需要遍历整个 list 才能得到你想要的结果,这样就不能非常快速地根据 id 查找到我们想要的元素,于是后来就有了索引技术

 

 

 

二、数据库索引实现

1.索引介绍

索引定义:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息

数据库索引是用于提高数据库表的数据访问速度的。

数据库索引的特点:

a)避免进行数据库全表的扫描,大多数情况,只需要扫描较少的索引页和数据页,而不是查询所有数据页。而且对于非聚集索引,有时不需要访问数据页即可得到数据。

b)聚集索引可以避免数据插入操作,集中于表的最后一个数据页面。

c)在某些情况下,索引可以避免排序操作。

 

 

2.索引实现原理

索引背后的数据结构基础是B+tree,在这里不细究,只用python的简单数据结构介绍基本的索引实现原理

为了不遍历上面的整个列表,我们将结构改成以下并加上索引表如下:

1 # 数据库索引实现: 2 { 3     '索引': { 4         'username': { 5             'wyb': 1, 6             'woz': 2, 7         }, 8  9     },10   1: {11     "id": 1,12     "username": "wyb",13     "password": "xxxxxx"14   },15   2: {16     "id": 2,17     "username": "woz",18     "password": "xxxxxx"19   }20 }

此时通过id查找某个用户时直接使用id值查找即可,若要使用username查找用户,在索引字典中查找相应username对应的id值即可,为数据表中某一项加索引即是向索引字典中加入

这一项的的名字及这一项所有值与id组成的项的字典如上图中的索引下的username

 

转载于:https://www.cnblogs.com/wyb666/p/9225121.html

你可能感兴趣的文章
问题-DelphiXE10.2怎么安装文本转语音(TTS)语音转文本(SR)控件(XE10.2+WIN764)
查看>>
ICMP协议
查看>>
UVA 10881 - Piotr's Ants【模拟+思维】
查看>>
Android中View的事件分发机制——Android开发艺术探索笔记
查看>>
【Python】输出程序运行的百分比
查看>>
Ajax跨域问题的两种解决方法
查看>>
HUNAN Interesting Integers(爆力枚举)
查看>>
让WebRTC支持H264编解码
查看>>
Servlet之doPost获取表单参数
查看>>
Leet Code OJ 219. Contains Duplicate II [Difficulty: Easy]
查看>>
max(min)-device-width和max(min)-width的区别
查看>>
基于SmartThreadPool线程池技术实现多任务批量处理
查看>>
获取relatedTarget属性
查看>>
用外部物理路由器时与外部dhcp服务时怎样使用metadata服务(by quqi99)
查看>>
Ubuntu 16.04中XMind 8导致Java内存溢出的问题解决(硬盘卡死,桌面卡死)
查看>>
mysql中函数greatest 与MAX区别
查看>>
GreenDao3.0新特性解析(配置、注解、加密)
查看>>
spring 使用注解注入 list 或 map
查看>>
Ora2Pg的安装和使用
查看>>
A Basic Example of Threads Synchronization in Python, python中的线程同步示例
查看>>