数据库索引的关注
索引的概念,索引是一个单独的、物理的数据库库结构,是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
表存储的组成
一部分来存放数据页面,另一部分存放索引页面。通常索引页面小很多。
数据检索的方式:当你向 RDMS 提出查询某个表的 SQL 时,就要进行数据检索,我们表面上是操作数据库,但是,实际上我们还是要进行磁盘读写,所以就会有 IO 操作,而真正花费的时间也在 IO 读写上。
但是,对于一个数据表来说,索引对查询速度是至关重要的,最起码,索引用得好,数据检索时间就大大减低,提高查询效率。
当你要查询的目标表没有建立索引,就需要从磁盘上读表的每一个数据页,若存在索引,则只需查找索引页面的就 ok 了。
索引的数据结构
常见的数据库系统,构成索引的数据结构多是 B -Tree 或者 B+Tree 。
Example :
Oracle : B-Tree , MSSQL : B+Tree
索引的存储,一条索引记录中包含的基本信息包括:
键值:定义索引时制定的所有字段值。
逻辑指针:指向数据页或另一索引页
索引的类型
A) 聚集索引,表数据按照索引的顺序来存储。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。
B) 非聚集索引,表数据存储顺序与索引无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。
在一张表上只能创建一个聚集索引,因为真实数据的物理顺序只可能是一种。
索引的好处
A)索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。
B)对于非聚集索引,有些查询甚至可以不访问数据页。
C)聚集索引可以避免数据插入操作集中于表的最后一个数据页。
D)一些情况下,索引还可用于避免排序操作。
注:需要经常更新的数据,进行更新时,同时也要更新索引(造成性能下降)