理解索引

数据库优化之索引

做~自己de王妃 提交于 2020-03-02 04:36:45
一 、引言 首先我们来思考一下什么是索引?索引的作用是什么?操作系统的文件索引和数据库的索引有什么不同? 什么是索引?对于这个问题我们可以打一个比喻,索引相对于文件的作用,就好比是目录相对于一本书的作用。所以它的作用也就显而易见了,就是为了查找,提高查找效率。是不是感觉不太有用,那再想一想你查字典的时候一页一页的找试一试,买一本最便宜的字典都要含着泪才能翻完。正常查找字典我们一般先找到部首的笔画,然后找到部首,再根据部首找到字,再根据字找到对应的页,这其实就是一个多级索引。所以说计算机科学里面的很多智慧来来自于生活。 接下来就是操作系统的文件索引和数据库的索引的区别了。一般操作系统都有一张索引表,因为一般操作系统的文件是无结构的字节系列,所以操作系统的索引表记录的是数据的逻辑块号和对应的物理块号。而数据库文件是有结构的记录,所以它可以由每一条记录的关键码来和物理块对应。 特别需要注意的是索引键对于的值是磁盘(外存)的物理地址,而不是内存中的逻辑地址。数据库在读取表的时候首先是先读取索引文件(可能数据文件本身就是索引文件,这和不同的实现方式相关, InnoDB 就是这种实现)。然后根据索引表来读取数据。 二 、选择率 要理解利用索引对数据库查询做优化有一点非常重要,就是全表扫描和索引扫描的区别,索引下面的内容非常重要。 对数据库操作影响最大的就是 IO 操作。表的扫描操作就和 IO