数据结构~Sqlserver索引使用的B树

B树相关概念

在B-树中查找给定关键字的方法是,首先把根结点取来,在根结点所包含的关键字K1,…,Kn查找给定的关键字(可用顺序查找或二分查找法),若找到等于给定值的关键字,则查找成功;否则,一定可以确定要查找的关键字在Ki与Ki+1之间,Pi为指向子树根节点的指针,此时取指针Pi所指的结点继续查找,直至找到,或指针Pi为空时查找失败。

时间复杂度

动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度

O(log2N)

与树的深度相关,那么降低树的深度自然会提高查找效率。

在SQLSERVER里的表现

我们都知道sqlserver数据行的存储结构有两种:堆(heap)和B树(binary二叉树)。学过数据结构的人都知道,二叉树的优点是:快速使用二分法找到数据,数据页面使用双向链表首尾相连。再介绍一下数据结构中的堆(heap)。堆中的数据没有任何顺序,数据页面也不会首尾相连。那怎么在堆中查找数据呢? 堆的结构及IAM结构如下:

堆表只依靠表里的IAM页(索引分配映射页)将堆的页面联系在一起,IAM中记录了页面编号和页面位置。由此可以通过IAM扫描数据。
      1.很多书中都讲到sqlserver数据行的存储结构有两种:堆(heap)和B树(binary二叉树)。而我觉得sqlserver数据页的存储结构有两种:堆(heap)和B树(binary二叉树)。
      2.数据都存在页面中,sqlserver页面有两种类型:数据页和索引页。索引页都是按照B树结构存储的。
      那么重点来了:
      不管是聚集索引,还是非聚集索引,索引数据都存放在索引页中。
      表中如果有聚合索引,那么数据全部存储在索引页中。
      表中如果只有有非聚合索引,那么数据存在堆页(也就是实际的数据行),但是索引数据存储在索引页中。
      表中如果既有聚集索引,也有非聚集索引,那么数据和索引都存放在索引页中。
      B树结构中,每一个节点就是一个页面,B树里会有一页:root page(亦即是根节点),非聚集索引和聚集索引都是一样的。
     下面开始步入正轨介绍索引:

聚集索引:

有人会问为什么一张表只能有一个聚集索引,简单来说因为表只能以一种顺序排列在磁盘中,所以表只能有一个聚集索引。而非聚集索引能有好几个。
      聚集索引因为数据全部存放在索引页中,所以顺着聚集索引就可以查到数据。聚集索引结构如下:

非聚集索引

1.如果非聚集索引的数据放在堆表中(表示没有聚集索引),而非聚集索引的数据放在索引页中。那么非聚集索引怎么查找数据呢?在非聚集索引的叶子节点(即叶子页面)有行定位器,行定位器指向行的位置。由文件标示符、页码、行上的行数组成。整个指针称为行ID(RID)。
      2.如果非聚集索引的数据放在索引表中(表示有聚集索引),那怎么查找数据呢?则行定位器会指向聚集索引键。SQL使用非聚集索引叶子节点的指针指向的聚集索引键值,来查找数据。

时间: 2024-11-10 05:33:00

数据结构~Sqlserver索引使用的B树的相关文章

十分钟入门pandas数据结构和索引

pandas数据结构和索引是入门pandas必学的内容,这里就详细给大家讲解一下,看完本篇文章,相信你对pandas数据结构和索引会有一个清晰的认识. 一.数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其可通过索引标签的方式获取数据,还具有索引的自动对齐功能:DataFrame类似于numpy中的二维数组,同样可以通用numpy数组的函数和方法,而且还具有其他灵

数据结构——二叉搜索树、B树、B-树

数据结构——二叉搜索树.B树.B-树 1. 综述 二叉排序树(Binary Sort Tree),又叫二叉查找树(Binary Search Tree),也叫二叉排序树. 二叉搜索树满足以下性质: 1. 若根节点左子树不为空,则左子树上的所有节点均小于根节点: 2. 若根节点右子树不为空,则右子树上的所有节点均大于根节点: 3. 其左右子树也是二叉搜索树(递归定义): 4. 没有键值相等的点. B树就是B-树.B树/B-树英文叫B-Tree,可能被不小心翻译成了B-树.

COJ 0981 WZJ的数据结构(负十九)树综合

WZJ的数据结构(负十九) 难度级别:E: 运行时间限制:15000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ的数据结构中有很多都是关于树的.这让很多练习模板的同学还要找来找去很不爽,于是WZJ跟小伙伴们一块商量如何将这些题汇拢到一块去: WZJ:为了大家简单,我规定一开始是一棵有根树. LZJ:那我一定得加上换根操作喽. XJR:链信息修改,链信息增加,链信息翻倍,维护链信息的最大,最小,总和肯定很好做. CHX:子树信息修改,子树信息增加,子树

SDUT 3340 数据结构实验之二叉树一:树的同构

数据结构实验之二叉树一:树的同构 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后,就得到另外一棵树.而图2就不是同构的. 图1 图2 现给定两棵树,请你判断它们是否是同构的. Input 输入数据包含

SQLServer索引

SQLServer索引1.聚集和非聚集索引聚集索引:根据聚集索引进行排序,非聚集索引因为不根据索引键排序,所以聚集索引比非聚集索引快(一个表只有一个聚集索引)2.唯一索引和非唯一索引唯一索引时值不能重复 建立索引的原则:1) 定义主键的数据列一定要建立索引.2) 定义有外键的数据列一定要建立索引.3) 对于经常查询的数据列最好建立索引.4) 对于需要在指定范围内的快速或频繁查询的数据列;5) 经常用在WHERE子句中的数据列.6) 经常出现在关键字order by.group by.distin

6. 蛤蟆的数据结构进阶六之二叉树排序树

6. 蛤蟆的数据结构进阶六之二叉树排序树 本篇名言:"有些人因为贪婪,想得更多的东西,却把现在所有的也失掉了. -- 伊索" 关于理论知识已经在上篇中进行描述,这篇我们主要来看下如何是实现二叉排序树. 欢迎转载,转载请标明出处: 1.  二叉排序树的定义 二叉排序树(BinarySort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值: ②

SQLSERVER 索引维护

SQLSERVER 索引维护 2012-03-08 00:30:09|  分类: 默认分类 |  标签:sql  sqlserver  索引  |举报|字号 订阅 Pages & Extents(页和扩展盘区)SQL Server 2000最基本的数据存储单元是data page,1个8K的存储空间.在分配存储空间时,SQL Server 2000并不是每次分配1个page,基本的存储空间分配单元是8个page的连续空间,称为extent.关于SQL Server 2000的page.exten

SDUT 3375 数据结构实验之查找三:树的种类统计

数据结构实验之查找三:树的种类统计 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 随着卫星成像技术的应用,自然资源研究机构可以识别每一个棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比. Input 输入一组测试数据.数据的第1行给出一个正整数N (n <= 100000),N表示树的数量:随后N行,每行给出卫星观测到的一棵树的种类名称,树的名称是一个不超过20

【算法导论】第十一课 扩充的数据结构、动态有序统计和区间树

本节课主要讲了如何构造自己想要的数据结构,或者扩充已有数据结构的功能,以实现想要的特定功能 比如设计一个动态结构,满足功能寻找第k大的数 其做法是维护每个结点的子结点个数来推导其秩,而不维护其秩,因为动态操作会使得其难以维护 红黑树的插入操作 1.树插入 2.rebalance 构造自己需要的扩充数据结构的基本流程 1.选择一个基本的数据结构 例如红黑树 2.决定要添加到结点的基本信息  例如实现查询第k大数功能,应添加的基本信息为所有子树结点之和,而非直接保存该结点键值的秩 3 维持 插入+旋