索引是如何工作的?知道上述知识后 , 索引就更容易理解了 。
举个例子 , 想象一下 , 现在有一本500页厚包含几十万字的字典 , 同时里面的字是无序排列的 , 现在我需要你从中找出某几个字出来同时不允许查看目录 。毫无疑问 , 我们只能一页一页地翻 , 这是非人类能接受的工作 , 我们必然想的是先看目录 , 找到相关的字或者偏旁 , 然后去对应的地方查找文字 , 这样效率就大大提高了 。目录事实上就是一种索引 , 其思想一脉相承 。
数据库的索引类似于书中的这个目录 。索引会帮助我们快速检索数据库 , 查询不需要通过整个表来获取数据 , 而是从索引中找到数据块 。以一张数据库表为例:
上表是一张真实的数据库表 , 其中每一行是一条记录 , 每条记录都有字段 。假设上面的数据库是一个有10万条记录的大数据库 。现在 , 我们想从10万条记录中搜索一些内容 , 那么挨着一个一个搜索无疑将花费很长的时间 , 这个时候我们在数据结构与算法里学的二分查找法就派上了用场 。
二分查找法使用二分查找法 , 需要将数据先排序 , 但是其查询效率将大大提高 。例子如下:
假设我们在上面的数据库中使用的是固定长度的记录,固定块记录大小为205个字节 , 默认块大小是1024字节 。则:
固定记录大小=204字节 , 块大小=1024字节
所以每个数据块的记录数=1024/204=5条记录 , 10万条记录就是2万个块
不使用任何算法 , 我们要查询100000条记录中的某一条 , , 在最坏的情况下我们需要遍历一遍2万block才能获得全部100000条记录 。但如果进行二分查找 , 则只需要进行20000的对数基数2 , 即14.287712次即可 。这意味着我们只需对排序后的值进行14次搜索 , 就可以使用二分查找到您感兴趣的唯一值 。
上图是对一串数字生成的二叉查找树 。其时间复杂度为O(n)=O(log2N),即以2为底 , n的对数 。其中n为查找目标群体的总数据量 。
例如 , 假设N为8 , 则O(n) = O(2为第8的对数) = O(3).
遍历方式 , 其时间复杂度为O(n)
在上述例子当中 , n就是10000 。使用索引的时间复杂度为O(2为第10000的对数) 大约等于 13. 和O(10000)之间差大概800倍 。
索引为何使得查询变快?这个时候我们就能直接回答上述问题了 , 建立了索引的数据 , 就是通过事先排好序 , 从而在查找时可以应用二分查找来提高查询效率 。这也解释了为什么索引应当尽可能地建立在主键这样的字段上 , 因为主键必须是唯一的 , 根据这样的字段生成的二叉查找树的效率无疑是最高的 。
为什么索引不能建立的太多?如果一个表中所有字段的索引很大 , 也会导致性能下降 。想象一下 , 如果一个索引和一个表一样长 , 那么它将再次成为一个需要检查的开销 。这就好比字典的目录非常详细 , 但是其长度已经和所有的文字一样长 , 这个时候目录本身的效率就大大下降了 。
索引有弊端吗?肯定是有的 , 索引可以提高查询读取性能 , 而它将降低写入性能 。当有索引时 , 如果更改一条记录 , 或者在数据库中插入一条新的记录 , 它将执行两个写入操作(一个操作是写入记录本身 , 另一个操作是将更新索引) 。因此 , 在定义索引时 , 必须牢记以下几点:
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 高球球杆的种类解析
- 解析产后抑郁症怎么办?产后抑郁症七大预防措施
- 烈日灼心真相是什么 烈日灼心深度解析
- 无法索引原因和解决措施 百度硬盘搜索无法索引
- 图文解析其实操步骤 电脑重装系统怎么一键备份还原
- 解析mini迅雷功能应用技巧 mini迅雷怎么写入软件
- 全面解析早晚练瑜伽的好处
- 解析led指示灯电阻计算公式 led指示灯接220v电阻怎么算
- 2者基本区别解析 java引用传递和值传递的区别
- 超详解析OSI模型知识点 一二三层交换机的区别