数据库索引结构知多少

作者: 云计算机网 分类: 云安全 发布时间: 2017-05-22 04:34

前几天在看 2018 云栖大会,来自中科院计算所的陈世敏研究员在数据库内核专场做了一场《NVM在数据库领域的研究和探索》的报告演讲。在30分钟的演讲中,其中有近10页PPT的内容和B+Tree这种索引有关。

例如其中的两页

为此,将自己对索引相关的理解梳理如下:

1.什么是索引?

索引是磁盘上组织数据记录的一种数据结构,它用来优化某类数据查询的操作。索引使得我们能够有效地查询满足索引的查询码(搜索码)字段上的查询条件的那些记录。可以在一个给定的数据记录集合上创建多个索引,每个索引有不同的查询码(搜索码)。

2.主键 与 聚集索引

主键是一种约束,主要用来保证数据的完整性,而聚集索引是一种文件(数据记录)的组织形式,索引的目的是查询优化,两者是不同的概念。

但两者并非完全没有联系,比如SQL SERVER默认是在主键上建立聚集索引的。在大多数情况下,默认建立的聚集索引是不起作用的,还是需要结合实际的业务场景来考虑,特别是在选择自增ID或GUID这种主键的情况。

创建主键,不可以再允许为Null值的列上创建,并且既有的数据记录中不可以有重复值,否则报错。聚集索引没有限制建立聚集索引的列一定必须 not null ,并且数据即可以唯一,也可以不唯一。

3.聚集索引 与 非聚集索引

聚集索引叶子层:具体的数据,按照聚集键顺序存储

非聚集索引叶子层:指针,指针有2类数据 RID或者是聚集键。

RID(堆表)RID【文件号:页号:槽号 8 bytes 文件号(4 bytes):页号(2 bytes):槽号(2 bytes)】 聚集键(聚集表)聚集键(聚集索引主键)

聚集键与非聚集索引有紧密的依赖关系,聚集键在每个非聚集索引叶子层都保存,慎重选择聚集键。

非聚集索引是第二索引, 对提高查询性能至关重要。

4.什么是书签查找

非聚集索引不包含查询需要的列,需要通过书签查找来获取所查询列信息。常见的书签查找有两种:一个是键查找(key lookup,聚簇索引的表),还有一个就是RID查找(RID lookup,堆表)。

使用覆盖索引,让非聚集索引包含查询列,从而避免书签查找。但是非聚集索引最大键列数为16,最大索引键大小为900字节,所以覆盖索引还是有限制的,此时可以考虑使用include属性来包含非键列。

5.二叉树 与 B-树

索引的存放为什么不用大家熟悉的二叉树,从数据结构上来讲 二叉树的查找速度最快和比较次数最少。主要考虑的因此是I/O的次数。查找时,在某非叶子节点决定下一步向左(小于)还是向右(大于或等于)的判断比较时,都需要将节点数据I/O到内存中,即需要发生一次I/O。所以最坏的情况下磁盘IO的次数有数的高度来决定(最坏的情况可以理解为想要查找的数在叶子节点上)。所以减少磁盘I/O的次数就必须要压缩树的高度。从数据库的基本原理,我们就知道,页I/O(从磁盘输入到主存及从主存输出到磁盘)的代价代表了典型的数据库操作代价,因此需要十分小心地优化数据库系统来减少这个代价。而B-树正好瞒住了这个要求。在B-树中,每一个非叶子节点可以容纳很多节点指针,从而树的高度在实际中很少超过3或4.一个平衡数的高度是从根到叶子的路径长度。实际上,根通常是存放在缓冲池中,因为它要被频繁的访问,所以一个高度为3的树,其实只需要3次I/O。

  • 百度一下,你就知道,百度一下你真的知道吗?或许别人百度一下能知道,你百度一下不知道对吗?因为人家有秘籍,接下来也告诉你这些秘籍!

    1、双引号 把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配。百度和Google 都支持这个指令。例如搜索: 电脑桌面壁纸。 搜索引擎使用技巧 2、减号 减号代表搜索不包含减号后面的词的页面。使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词。Google 和bd都支持这个指令。 例如:搜索 -引擎 返回的则是包含搜索这个词,却不包含引擎这个词的结果 百度搜索引擎使用技巧 3、inurl inurl: 指令用于搜索查询词出现在url 中的页面。百度和Google 都支持inurl 指令。inurl 指令支持中文和英文。 比如搜索:inurl:父亲节 百度搜索引擎使用技巧 返回的结果都是网址url 中包含父亲节的页面。由于关键词出现在url 中对排名有一定影响,使用inurl:搜索可以更准确地找到竞争对手。 表示搜索出来的链接里面带有关键词。 4、intitle intitle: 指令返回的是页面title 中包含关键词的页面。Google 和百度都支持intitle 指令。 使用intitle 指令找到的文件是更准确的竞争页面。如果关键词只出现在页面可见文字中,而没有出现在title 中,大部分情况是并没有针对关键词进行优化,所以也不是有力的竞争对手。 搜索引擎使用技巧 表示搜索出来的标题里面带有关键词。 5、filetype 用于搜索特定文件格式。Google 和百度都支持filetype 指令。 比如搜索filetype:pdf 父亲节 搜索引擎使用技巧 返回的就是包含父亲节 这个关键词的所有pdf 文件。 6、site site:是SEO 最熟悉的高级搜索指令,用来搜索某个域名下的所有文件。 搜索引擎使用技巧 你可以用这几种命令组合,例如site:.com inurl:blog post a comment -comments closed -you must be logged in 输入你的关键词, site:.com 是 指, 只显示.com的网站。 如果你想要 org的链接,就换成 site:.org,inurl:blog 是指博客。 #p#分页标题#e#
  • 相关推荐:

  • 网络时代,你应该掌握的
  • MySQL中索引优缺点、分类
  • 关系型数据库中常用的表
  • MySQL表结构变更,不可不
  • MySQL索引的设计和使用
  • MySQL表查询操作实例
  • MySQL数据库使用trigger更新
  • Oracle数据库查询重复数据
  • MySQL数据库监控软件lep
  • OracleLinux7.3下Oracle11g数据
  • 网站内容禁止违规转载,转载授权联系中国云计算网