索引是为了快速检索和定位数据行而创建的一种数据结构。索引是由表中索引列数据进行排序后的集合和指向这些值的物理标识(例如:ROWID等聚集索引键)共同组成。如果数据库中默认的页大小是16K,就表示数据库每次从磁盘只能读取16K的数据。我们创建如下的表和索引来介绍索引的形成过程:
索引的形成过程
第一步:首先创建叶子节点,提取数据(索引列+行记录地址或主键),再将提取的数据进行排序,然后把排序好的数据存入到页中。但是每个页只能存放16K的数据,如果数据大于16K就没法在单页存放,就需要多个页来存放数据,从而形成数据链表。页内是单链表结构,数据记录是从小到大进行排序;页间是双链表结构,下一页的最小记录大于等于上一页的最大记录。
第二步:接着创建页目录,提取每个页中的最小记录+页号形成新的条目,再将页内和页间进行排序形成链表,这样页目录就创建成功了。如果数据量很大,那么页目录也会很多,这样页目录又形成了很多页,遍历起来会很耗费时间。
第三步:最后创建根节点,数据量变大页目录也会变多,页目录又会形成了很多页,遍历起来会很耗费时间。再进行提取就形成新根节点。
通过索引读数据
聚簇索引的特点
聚簇索引的排序规则是按主键进行排序,叶子节点存储的是整个行记录,页目录条目存储的是主键+页号,在达梦数据库创建表指定主键,默认的就是聚簇索引表,不需要要单独创建。
聚簇索引的优点
优势是根据主键查询条目时不用回表,因为叶子节点就是行记录。例如SELECT * FROM T WHERE C1或者SELECT C1/C2/C3/C4/.../CN WHERE C1都是不需要回表查询
聚簇索引的缺点
劣势是如果碰到不规则主键数据插入到表的时候,会造成频繁的页分裂,就影响到了系统的性能。如果插入不规则主键数据插入表时也分裂的情况:
文章
阅读量
获赞