《数据库系统概念》13-索引

索引分为顺序索引(ordered indixes)和散列(hash indices)索引,前者基于值的顺序;后者将值平均分布到若干bucket中,值所属的bucket由散列函数决定。

索引和散列的实现技术有多种,但没有哪一种是绝对最好的,每种方式有其最适合的场景,可通过这几个方面来进行评估:访问类型(能有效支持的访问类型,如特定值查找、范围查找)、访问时间、插入时间、删除时间、空间开销(索引额外占用的空间)。

一、顺序索引

a)为了快速随机访问记录,可以使用顺序索引。用于在文件中查找记录的属性或属性集称为搜索码(search key),每个索引结构与一个特定的搜索码关联,并按顺序存储搜索码的值,将每个搜索码与对应的记录关联起来。

被索引的记录本身也可以按一定的顺序存储,如果记录按照某个搜索码指定的顺序排序,则该搜索码对应的索引称为聚集索引(clustering index)或主索引(primary index),聚集索引的搜索码一般是主键,但不是必须这样。搜索码指定的顺序与记录的物理存储顺序不同的索引称为非聚集索引(noclustering index)或辅助索引(secondary index)。

b)稠密索引和稀疏索引

索引项由搜索码和指向具有该搜索码值的若干条记录的指针构成,指针包含block的标识和标识磁盘块内记录的块内偏移量。顺序索引又分为稠密索引(dense index)和稀疏索引(sparse index)。

稠密索引中,每个搜索码都有一个索引项。索引项包含搜索码值以及指向具有该搜索码值的第一条数据记录的指针。如果是稠密聚集索引,具有相同搜索码值的其余记录可以顺序地存储在第一条数据记录之后;对于非聚集索引,则需要为每条搜索码值建立索引。

稀疏索引中,只为搜索码的某些值建立索引项。只有索引是聚集索引时才可以使用稀疏索引,这样,即使索引中没有要查找的搜索码,也可以根据索引确定搜索码的区间,进而找到要查找的记录。

c)多级索引

如果记录数很多,其索引也会变得很大。假定100条索引占用一个4K的block,那么100,000,000条记录的索引的体积会高达4G。只有将全部索引都装载到内存,才能最大化索引的速度,如果计算机内存小于4G,那么索引就无法完全放入内存中,即使内存够大,也还要供给其他应用程序使用。

在数据量很大、索引文件较大时可以使用多级索引,即在原先内层索引的基础上再建立若干层外层索引,外层索引与内层索引之间的关系同前面索引与数据文件的关系一样。多级索引与树结构紧密相关,比如用于内存索引的二叉树。

二、索引的更新

在插入、删除数据的时候,对应的索引需要更新;而数据被修改时,其索引项不是直接修改,而是分为“删除就搜索码值,插入新搜索码值”这两步执行的,所以索引的更新只涉及插入和删除。

a)插入

稠密索引

如果插入数据的搜索码值在索引中不存在,则直接插入索引。

如果插入的搜索码值已经存在且指向多条数据,则在这条索引项下新增指向插入数据的指针。

如果插入的搜索码值已经存在但只指向第一条包含该搜索码值的记录,则仅将插入数据放到具有相同搜索码值的其他记录之后。

稀疏索引

假设稀疏索引为每个块保存了一个索引项。如果插入数据时,系统需要新创建一个块,则在索引中插入针对新块中第一条记录的搜索码的索引项。如果新插入的数据刷新了块中记录的最小搜索码值(按照搜索码的顺序存储),这个指向这个块的索引项需要被更新;其余情况不需要更新索引。

b)删除

稠密索引

如果待删除的记录的搜索码值是唯一的,则删除对应的索引。

如果待删除记录的搜索码值不唯一,且索引项指向所有具有该搜索码值的记录,则只删除索引项中指向待删除记录的指针。

如果待删除记录的搜索码值不唯一、索引项仅指向第一条具有该搜索码值的记录,而且第一条记录待删除,在删除这条记录的同时,将索引项指向下一条具有该搜索码值的记录。

稀疏索引

如果不存在包含被删除记录的索引项,则不做任何操作。

如果被删除的记录是具有该搜索码值的唯一记录,则索引项A指向下一个包含该搜索码值的记录,但如果下一个包含该搜索码值的记录已经有索引项,则删除索引项A。

如果被删除的记录并非是具有该搜索码值的唯一记录,则索引项指向下一条具有相同搜索码值的记录。

学习资料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,873评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,483评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,525评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,595评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,018评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,958评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,118评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,873评论 0 208
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,643评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,813评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,293评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,615评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,306评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,170评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,968评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,107评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,894评论 2 278

推荐阅读更多精彩内容