精华内容
下载资源
问答
  • 索引顺序

    千次阅读 2018-09-18 20:16:17
    当数据表中的记录个数 n 很大时, 由于内存容量的限制,不能全部存入内存。因此,在查找过程中需要反复与外存交换信息,此时前面介绍的各种算法的效率都很低。  折半查找:记录必须全部在内存。  静态查找树表:...

    【说明】博客内容选自课件内容

    目录

    静态索引结构

    1. 索引顺序表

    索引顺序表的查找

    查找成功时的平均查找长度

    2. m 叉静态搜索树


    静态索引结构

    当数据表中的记录个数 n 很大时, 由于内存容量的限制,不能全部存入内存因此,在查找过程中需要反复与外存交换信息,此时前面介绍的各种算法的效率都很低。

       折半查找:记录必须全部在内存。

       静态查找树表:记录必须全部在内存。  

       二叉平衡树:记录必须全部在内存。

       顺序查找:记录不必全部在内存,但搜索效率极低。

    采用索引方法来实现记录的存储和搜索

    1. 索引顺序表  2. m 叉静态搜索树

    后面要讨论的B树和键树是动态索引结构

    1. 索引顺序表

    例:有一个存放职工信息的数据表. 每一个职工数据10M字节,假设有10000职工,则数据表共占100G。假设内存只有2G

    采用索引表,每个索引项可索引一个职工记录,且占8个字节,则10000个索引项需要80K个字节。

    稠密索引:一个索引项对应数据表中一个记录的索引结构

    稀疏索引:当记录在外存中有序()存放时,可以把所有n 个记录分为b 个子表()存放,一个索引项对应数据表中一组记录(子表)

    在子表中记录可以关键码有序地存放,可以无序地存放。但所有这些子表必须分块有序,即:后一个子表中所有记录的关键码均大于前一个子表中所有记录的关键码。

    索引顺序表的查找

    一般分为两级搜索:

    先在索引表中搜索给定值 K, 查找确定满足范围ID[i-1].max_key < K <= ID[i].max_key i , 即待查记录可能在的子表的序号。

    然后在第 i 个子表中按给定值搜索要求的记录。

    n索引表是按max_key有序的, 且长度也不大,可以折半搜索,也可以顺序搜索。

    n各子表中的记录如果也按对象关键码有序, 可以采用折半查找或顺序查找; 如果不是按记录关键码有序, 只能顺序查找。

    查找成功时的平均查找长度

      ASLIndexSeq = ASLIndex + ASLSubList

     其中:ASLIndex  索引表中搜索子表位置的平均查找长度

          ASLSubList  :  子表中查找记录位置的查找成功时的平均查找长度。


    l设把长度为 n 的表分成均等的 b 个子表,每个子表有 s 个记录,则 b = [n/s](此处向上取整)

    l又设表中每个记录的查找概率相等,则在索引表中查找的概率1/b,在子中查找的概率为 1/s

    l若对索引表和子表都用顺序查找,则查找成功时的平均查找长度为:

    ASLIndexSeq =  (b+1)/2 + (s+1)/2 = (b+s)/2 +1(n / s + s )/2 + 1

    n索引顺序查找的平均查找长度与表中的记录个数n有关,与每个子表中的记录个数s 有关。

    n给定n情况下,s应选择多大?

    n用数学方法可导出, 当 s =    时, ASLIndexSeq 取极小值:ASLIndexSeq =     +1。

    n这个值比顺序查找强,但比折半查找差。

    2. m 叉静态搜索树

    n当数据记录数目特别大,索引表本身也很大,在内存中放不下,需要分批多次读取外存才能把索引表搜索一遍。

    n此时, 可以建立索引的索引(二级索引)。二级索引可以常驻内存,二级索引中一个索引项对应一个索引块,它记录下一级索引块的存储地址及索引块中的最大关键码

    m 叉静态搜索树特点:

       由多级索引结构形成一种 m 叉树

        树中每一个内部结点表示一个索引块

        每个索引块中最多存m 索引项

        索引项分别给出各子树结点的最大关键码结点地址

     

    展开全文
  • 索引顺序文件

    千次阅读 2013-04-05 15:56:39
    6.5 索引顺序文件 读书笔记整理:文件系统 索引顺序文件是顺序文件的扩展,其中各记录本身在介质上也是顺序排列的,它包含了直接处理和修改记录的能力。索引顺序文件能像顺序文件一样进行快速顺序处理,既...


    6.5 索引顺序文件


    读书笔记整理:文件系统

    索引顺序文件是顺序文件的扩展,其中各记录本身在介质上也是顺序排列的,它包含了直接处理和修改记录的能力。索引顺序文件能像顺序文件一样进行快速顺序处理,既允许按物理存放次序(记录出现的次序),也允许按逻辑顺序(由记录主关键字决定的次序)进行处理。

    索引顺序文件通常用树结构来组织索引。索引结构形成后,根据在系统运行时索引结构是否变化,又分为静态索引结构和动态索引结构。第6章介绍的B-树和B+树适用于组织索引顺序文件的动态索引结构。索引顺序存取方式ISAM(Indexed Sequential Access Method)是一种专为磁盘存取设计的文件组织方式,是一种静态索引结构。

    8.5.1 ISAM

    ISAM采用多级索引:主索引、柱面索引、磁道索引。文件的记录在同一盘组上存放时,应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上,对同一柱面,则应按盘面的次序顺序存放。例如图8-6为存放在一个磁盘组上的ISAM文件,每个柱面建立一个磁道索引。每个磁道索引项由两部分组成:基本索引项和溢出索引项,如图8-7所示,每一部分都包括关键字和指针两项,前者表示该磁道中最末一个记录的关键字(在此为最大关键字),后者指示该磁道中第一个记录的位置。柱面索引的每一个索引项也由关键字和指针两部分组成,前者表示该柱面中最末一个记录的关键字(最大关键字),后者指示该柱面上的磁道索引位置。柱面索引存放在某个柱面上,若柱面索引较大,占多个磁道时,则可建立柱面索引的索引——主索引。

     

    在ISAM文件上查找记录时,先从主索引出发找到柱面索引的分布,然后从柱面索引找到记录所在柱面的磁道索引,最后从磁道索引找到记录所在磁道的第一个记录的位置,由此出发在该磁道上进行顺序查找直至找到为止;反之,若找遍该磁道而不存在此记录,则表明该文件中无此记录。例如,查找关键字为99的记录R99时的查找路径如图8-6中的粗实线所示,即先查主索引(将主索引读入内存),由于99<400,根据指针指示找到柱面索引,由于80<99<200,则按柱面索引项200的指针指示查柱面C2 的磁道索引,因为90<99<200,在柱面C2中找到关键字99所在的磁道,最终查得R99

    当然在实际使用中,通常可以把主索引常驻内存,柱面索引也可以不放在文件空间的开始柱面,而放在中间位置的柱面上较合适。因为每次查找总得先查柱面索引,然后到某一柱面上查磁道索引,这样柱面间的移动距离可短一些。

    从图8-6中读者可以看到,在每个柱面上还开辟有一个溢出区,并且磁道索引项中有溢出索引项,这是为插入记录所设置的。由于ISAM文件中记录是按关键字顺序存放的,则在插入记录时需移动记录并将同一磁道上最末一个记录移至溢出区,同时修改磁道索引项。通常溢出区可有三种设置方法;(1)集中存放,即整个文件设一个大的单一的溢出区;(2)分散存放,即每个柱面设一个溢出区;(3)集中与分散相结合,即溢出时记录先移至每个柱面各自的溢出区,待满之后再使用公共溢出区。图8-6是第二种设置法。

    在磁道索引中,索引项的两个子项在记录插入前是相同的,但在记录插入后可能变化。图8-8所示为插入记录和溢出处理的具体实例。其中图(a)是插入前柱面C1的状态,插入记录R65时,将磁道T2中关键字大于65的记录后移,且使R80溢出到溢出区,磁道索引也相应改变。图(b)是插入关键字为65的记录之后的状态。

    在ISAM文件上删除一个记录时,只需找到待删除的记录,在其存储位置上作删除标记即可,而不需要移动记录或改变指针。但在经过多次的增删后,文件的结构可能变得很不合理。此时,大量的记录进入溢出区,而基本区中又浪费很多空间。因此,通常需要周期地整理ISAM文件。具体做法是:把记录读入内存,重新排列,复制成一个新的ISAM文件,填满基本区而空出溢出区。

    8.5.2 VSAM文件

    虚拟存储方法VSAM(Virtual Sequential Access Method)是B+树应用的一个典型例子,是一种索引顺序文件的组织方式。这种存取方法利用了操作系统中的虚拟存储器的功能,给用户提供方便。这种存取方法与存储设备无关,与柱面、磁道等物理存储单位没有必然联系,因为对用户而言,文件只有控制域和控制区间等逻辑存储单位。

    VSAM的总体结构如图8-9所示。它由三部分组成:索引集、顺序集和数据集。文件的记录均存放在数据集中,顺序集也是文件索引的一部分,顺序集和索引集一起形成一棵B+树结构的文件索引。可以利用索引对VSAM进行随机存取,利用顺序集对文件进行顺序存取。

         数据集中的一个结点称为控制区间(Control Interval),它是一个I/O操作的基本单位,它由一组连续的存储单元组成。控制区间的大小可随文件不同而不同,但同一文件上控制区间的大小相同。每个控制区间含有一个或多个按关键字递增有序排列的记录。数据集中记录大小可以是变长的,因而每个记录都有一个控制信息,这些记录的控制信息顺次自右而左排列在控制区间的右部,中间是自由空间。另外还有一个与整个控制区间有关的控制信息,放在控制区间的最右端,用来说明控制区间中已经存放了多少记录等信息。控制区间的结构如图8-10所示。

         顺序集中存放每个控制区间的索引项。每个控制区间的索引项由两部分信息组成,即该控制区间中的最大关键字和指向控制区间的指针。若干相邻控制区间的索引项构成顺序集中的一个结点,相当于B+树的一个叶子结点,结点之间用指针连接起来,而每个结点又在其上一层的结点中建有索引,且逐层向上建立索引,所有的索引项都由最大关键字和指针两部分信息组成,这些高层的索引项形成B+树的非终端结点。因此,VSAM文件既可在顺序集中进行顺序存取,又可从最高层的索引(B+树的根结点)出发按关键字存取。顺序集中一个结点连同其对应的所有控制区间形成一个整体,称做控制域(Control Range)。每个控制区间可视为一个逻辑磁道,而每个控制域可视为一个逻辑柱面。

        VSAM文件中没有溢出区,解决插入记录的办法是在文件初建时留有一定的空闲空间。一种实现方法是在控制区间中留用一定的自由空间,如图8-10所示。另一种做法是在控制域中留有一定的空闲控制区间。为了提高效率,一个控制域中数据存放方式如图8-11所示。在图8-11中,一个控制域的数据放在同一柱面内,控制域中顺序集(索引)结点占一个磁道,控制区间存放在其它磁道上。顺序集结点可以在一个磁道上重复存放,以便减少读取索引的等待时间。

         在VSAM文件插入记录时,首先调用B+树的查找算法,确定该记录应插入的顺序集结点,进而确定该记录应插入的控制区间及相应位置。如果该控制区间中自由空间足以容纳该记录,则将要插入位置右面的记录右移腾出空间插入该记录,并在相应位置建立控制信息。例如,在图8-12的VSAM文件中插入ARS、BIT,结果如图8-13(a)所示。如果自由空间不够,则检查该控制区间所在的控制域中是否还有空闲的控制区间,若有,则将控制区间分裂,将其中的近似一半的记录移动到一个空闲的控制区间中,例如,在图8-13(a)上插入BEC,结果如图8-13(b)所示。如无,则进行一次控制域的分裂。无论是控制域的分裂还是控制区间的分裂,均需要在顺序集中插入索引项,并且这一插入有可能波及高层的索引,但这需要采用B+树的插入算法实现。

    在VSAM文件中删除记录时,需将同一控制区间中较删除记录关键字大的记录向前移动,把空间留给以后插入的新记录。若整个控制区间变空,则需修改顺序集中相应的索引项。

    由此可见,VSAM文件占有较多的存储空间,一般只能保持约75%的存储空间利用率。但它的优点是:动态地分配和释放存储,不需要对文件进行重组,并能较快地对插入的记录进行查找,查找一个后插入记录的时间与查找一个原有记录的时间是相同的。

    展开全文
  • where条件顺序与建索引顺序

    千次阅读 2017-07-26 18:43:00
    查询时,如果数据量很大,where 后面的条件与建索引的顺序相同,也没有什么多少差别,聚集索引稍微快点; 但where 后面的条件与建索引顺序不同,速度会慢下来,到底慢多少,不同的机器会不一样,没有绝对的说法。...

    查询时,如果数据量很大,where 后面的条件与建索引的顺序相同,也没有什么多少差别,聚集索引稍微快点; 但where 后面的条件与建索引顺序不同,速度会慢下来,到底慢多少,不同的机器会不一样,没有绝对的说法。

    MSSQL引擎首先对条件进行优化,优化以后再查询。
    1,还是那句,先看执行计划。
    2.2008的话,对where的顺序它会自己优化,测试过,顺序对执行计划没有影响,不过2005好像有。所以从规范化来说,还是把筛选性高的放在where的前面,而不是考虑是否聚集索引
    3.对于建立索引,就有讲究了,统计信息只看索引的第一列,所以创建索引时,筛选性高的那列应该放到索引定义的第一位。

    #1.WHERE后面的条件只要一模一样,写在哪儿都是无所谓的。相同环境下,生成的执行计划也是一样的。
    #2.至于建立索引的顺序,就有讲究了:1.复合索引的第一个字段最重要,SQL SERVER只生成复合索引第一个字段的统计信息,那么优化器也只能根据复合索引的第一个字段的统计信息来优化查询。2.当你自己从业务上了解了数据分布后,怎样写SQL和怎样建立索引就是一门学问了。有时候要根据SQL语句建立索引,有时候要根据已有索引更改SQL语句(用临时表等方法)。
    #3.要想学会创建适合业务的索引,除了业务中的数据分布,你要了解索引的结构(聚集和非聚集),高选择性的概念,数据在页上的存储方式,及看得懂执行计划。

    sp_help '表名',拉到最下,有索引的定义

    --指的fieldA,fieldB的顺序,也就是说:把fieldA这个字段排在第一位,是要考虑考虑的
    CREATE INDEX IX_tablename_fieldA_fieldB ON dbo.tablename
    (
    FieldB
    )
    GO

    索引顺序有讲究,where一般没有,不过2005及以下版本听说是有的,不过我没环境,你最好试一下

    1、那个是符合索引。
    2、所谓的索引顺序,其实是复合索引的顺序,两个索引之间没啥顺序可言,具体由sql查询优化器去根据统计信息及查询语句,和当前资源,选择使用哪个索引而已。

    1、程序端的sql语句中,mssql对where的顺序会优化。不存在“ 1=1 ”的问题;也不存在“聚集 and 非聚集”的顺序问题。
    2、mssql表中的索引顺序,对查询效率有影响,具体的需要结合实际业务——能够将查询结果最小化的索引放置在前面。
    (个人见解——其实大多数业务中,应该是主键—聚集索引—非聚集索引)
    3、符合索引的“字段A、字段B”——不说了,这个清楚。

     

    主键仅仅为了确保业务上的数据可标识性,实际上可以没有聚集索引(我就改过很多表,把主键上的聚集索引移到别的字段上,效果不错),但是很多业务又真的需要经常使用主键做一些适合聚集索引特性的操作,所以可能这也是微软默认把主键带有聚集索引的理由之一,而且聚集索引能组织数据。对性能和维护来说很重要

     

    展开全文
  • 文件组织:索引顺序文件

    千次阅读 2013-11-08 23:42:39
    ISAM文件和VSAM文件是常用的索引顺序文件。 ISAM文件  ISAM为Indexed Sequential Access Methed(索引顺序存取方法)的缩写,它是一种专为磁盘存取文件设计的文件组织方式,采用静态索引结构。由于磁盘是以盘组、...

    索引文件构成     

    链接地址:http://student.zjzk.cn/course_ware/data_structure/web/wenjian/wenjian10.3.1.htm

    1.索引文件

         索引文件由主文件和索引表构成。
      ①主文件:文件本身。
      ②索引表:在文件本身外建立的一张表,它指明逻辑记录和物理记录之间的一一对应关系。

    2.索引表组成
         索引表由若干索引项组成。一般索引项由主关键字和该关键字所在记录的物理地址组成。
      注意:
         索引表必须按主关键字有序,而主文件本身则可以按主关键字有序或无序。

    3.索引顺序文件和索引非顺序文件
    (1)索引顺序文件(Indexed Sequential File)
         主文件按主关键字有序的文件称索引顺序文件。
         在索引顺序文件中,可对一组记录建立一个索引项。这种索引表称为稀疏索引。

    (2)索引非顺序文件(Indexed NonSequentail File)
         主文件按主关键字无序得文件称索引非顺序文件。
         在索引非顺序文件中,必须为每个记录建立一个索引项,这样建立的索引表称为稠密索引。
      注意:
         ① 通常将索引非顺序文件简称为索引文件。
         ② 索引非顺序文件主文件无序,顺序存取将会频繁地引起磁头移动,适合于随机存取,不适合于顺序存取。
         ③ 索引顺序文件的主文件是有序的,适合于随机存取、顺序存取。
         ④ 索引顺序文件的索引是稀疏索引。索引占用空间较少,是最常用的一种文件组织。
         ⑤ 最常用的索引顺序文件:ISAM文件和VSAM文件。

    索引文件的存储

    1.索引文件的存储
         索引文件在存储器上分为两个区:索引区和数据区。索引区存放索引表,数据区存放主文件。

    2. 索引文件的建立
         建立索引文件的过程:
      (1) 按输入记录的先后次序建立数据区和索引表。其中索引表中关键字是无序的
      (2) 待全部记录输入完毕后对索引表进行排序,排序后的索引表和主文件一起就形成了索引文件。
      【例】对于表10.2的数据文件,主关键字是职工号,排序前的索引表如表10.3所示,排序后的索引表见表10.4,表10.2和表10.4一起形成了一个索引文件。



    ISAM文件和VSAM文件是常用的索引顺序文件。


    ISAM文件

         ISAM为Indexed Sequential Access Methed(索引顺序存取方法)的缩写,它是一种专为磁盘存取文件设计的文件组织方式,采用静态索引结构。由于磁盘是以盘组、柱面和磁道三级地址存取的设备,则可对磁盘上的数据文件建立盘组、柱面和磁道多级索引,下面只讨论在同一个盘组上建立的ISAM文件。

    1、ISAM文件的组成
         ISAM文件由多级主索引、柱面索引、磁道索引和主文件组成。
         文件的记录在同一盘组上存放时,应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上。对同一柱面,则应按盘面的次序顺序存放。
    【例】图10.4所示的文件是存放在同一个磁盘组上的ISAM文件。
    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
     
         


    其中:
      ① C表示柱面;
         ② T表示磁道;
         ③ C i T i 表示i号柱面,j号磁道;
         ④ R i 表示主关键字为i的记录。
    分析:
         从图中可看出,主索引是柱面索引的索引,这里只有一级主索引。若文件占用的柱面索引很大,使得一级主索引也很大时,可采用多级主索引。当然,若柱面索引较小时,则主索引可省略。
         通常主索引和柱面索引放在同一个柱面上(如图10.4是放在0号柱面上),主索引放在该柱面最前的-个磁道上,其后的磁道中存放柱面索引。每个存放主文件的柱面都建立有一个磁道索引,放在该柱面的最前面的磁道To上,其后的若干个磁道是存放主文件记录的基本区,该柱面最后的若干个磁道是溢出区。基本区中的记录是按主关键字大小顺序存储的,溢出区被整个柱面上的基本区中各磁道共享,当基本区中某磁道溢出时,就将该磁道的溢出记录,按主关键字大小链成一个链表(以下简称溢出链表)放人溢出区。

    2、各级索引中的索引项结构

    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
     

        注意:
         磁道索引中的每一个索引项,都由两个子索引项组成:基本索引和溢出索引项。

    3、ISAM文件的检索
      在ISAM文件上检索记录时,从主索引出发,找到相应的柱面索引;从柱面索引找到记录所在柱面的磁道索引;从磁道索引找到记录所在磁道的起始地址,由此出发在该磁道上进行顺序查找,直到找到为止。若找遍该磁道均不存在此记录,则表明该文件中无此记录;若被查找的记录在溢出区,则可从磁道索引项的溢出索引项中得到溢出链表的头指针,然后对该表进行顺序查找。
      【例】要在下图中查找记录R78,先查主索引,即读入CoTo;因为78<300,则查找柱面索引的C0Tl(不妨设每个磁道可存放5个索引项),即读人C0Tl;因为70<78<150,所以进一步把C2T0入内存;查磁道索引,因为78<81,所以C2T1即为R78所存放的磁道,读人C2T1,后即可查得R78
    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
     
      为了提高检索效率,通常可让主索引常驻内存,并将柱面索引放在数据文件所占空间居中位置的柱面上,这样,从柱面索引查找到磁道索引时,磁头移动距离的平均值最小。

    4、ISAM文件的插入操作
      当插人新记录时,首先找到它应插入的磁道。若该磁道不满,则将新记录插入该磁道的适当位置上即可;若该磁道已满,则新记录或者插在该磁道上,或者直接插入到该磁道的溢出链表上。插入后,可能要修改磁道索引中的基本索引项和溢出索引项。
      【例】依次将记录R 72,R 87,R 91插入到上图所示的文件后,第二个柱面的磁道索引及该柱面中主文件W的变化状况如下图所示。
    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
     
      
      当插入R 72时,应将它插在C 2T l,因为72<75,所以R 72应插在该磁道的第一个记录的位置上,而该磁道上原记录依次后移一个位置,于是最后一个记录R 81被移人溢出区。由于该磁道上最大关键字由81变成79,故它的溢出链表也由空变为含有一个记录R 81的非空表。因此,将C2T1对应的磁道索引项中基本索引项的最大关键字,由81改为79;将溢出索引项的最大关键字置为81,且令溢出链表的头指针指向R 81,的位置;类似地,R87和B91被先后插入到第2号柱面的第2号磁道C 2T 2上。插入R 87时,R 100被移到溢出区;插入R 91时,R 95被移到溢出区,即该磁道溢出链表上有两个记录。虽然物理位置上R 100在R 95,之前,但作为按关键字有序的链表,B 95是链表上的第一个记录,R 100是第二个记录。因此,C 2T 2对应的溢出索引项中,最大关键字为100,而溢出链表头指针指向R95的位置;C 2T 2移出R 95和移出R 100后,92变为该磁道上最大关键字,所以C 2T 2对应的基本索引项中最大关键字由100变为92。


    5、ISAM文件中删除记录的操作
      ISAM文件中删除记录的操作,比插入简单得多,只要找到待删除的记录,在其存储位置上作删除标记即可,而不需要移动记录或改变指针。在经过多次的增删后,文件的结构可能变得很不合理。此时,大量的记录进入溢出区,而基本区中又浪费很多的空间。因此,通常需要周期性地整理ISAM文件,把记录读入内存重新排列,复制成一个新的ISAM文件,填满基本区而空出溢出区。


    VSAM文件

         VSAM是Virtual Storage Access Method(虚拟存储存取方法)的缩写,它也是一种索引顺序文件的组织方式,采用B+树作为动态索引结构。

    1、B+树
         B+树是一种常用于文件组织的B-树的变型树。一棵m阶的B+树和m阶的B-树的差异是:
      ①有k个孩子的结点必有k个关键字;
      ②所有的叶结点,包含了全部关键字的信息及指向相应的记录的指针,且叶子结点本 身依照关键字的大小,自小到大顺序链接;
      ③上面各层结点中的关键字,均是下一层相应结点中最大关键字的复写(当然也可采用"最小关键字复写"的原则),因此,所有非叶结点可看作是索引部分。
    【例】下图是一棵3阶的B+树。


    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
     



      注意: 
         ①通常在B+树上有两个头指针root和sqt,前者指向根结点,后者指向关键字最小的叶子结点。
         ②对B+树可进行两种查找运算:一种是从最小关键字起进行顺序查找;另一种是从根结点开始进行随机查找。

    2、B+树的运算
         在B+树上进行随机查找、插入和删除的过程,基本上与B-树类似。

    (1)B+树的查找运算
         在查找时,若非叶结点上的关键字等于给定值,并不终止,而是继续向下直到叶子结点。因此,在B+树中,不管查找成功与否,每次查找都是走了一条从根到叶子结点的路径。
         B+树查找的分析类似于B-树。B+树的插入也仅在叶子结点上进行,当结点中的关键字个数大于m时要分裂成两个结点,它们所含关键字的个数分别为:
         【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆 
    并且它们的双亲结点中应同时包含这两个结点的最大关键字。

    (2)B+树的删除
         B+树的删除仅在叶子结点进行,当叶子结点中的最大关键字被删除时,其在非终端结点中的值可以作为一个"分界关键字"存在。若因删除而使结点中关键字的个数少于  【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆 时,则可能要和该结点的兄弟结点合并,合并过程和B-树类似。

    3、VSAM文件
         B+树的每个叶结点中的关键字均对应一个记录,适宜于作为稠密索引。但若让叶结点中的关键字对应一个页块,则B+树可用来作为稀疏索引。IBM公司VSAM文件是用B+树作为文件的稀疏索引的一个典型例子。
         这种文件组织的实现,使用了IBM370系列的操作系统的分页功能,这种存取方法与存储设备无关,与柱面、磁道等物理存储单位没有必然的联系。例如,可以在一个磁道中放n个控制区间,也可以一个控制区间跨n个磁道。

    (1)VSAM文件的结构
         VSAM文件的结构由三部分组成:索引集顺序集数据集(如下图所示)。
    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
     
           
       ①数据集
         文件的记录均存放在数据集中。数据集中的一个结点称为控制区间(Control Interval),它是一个I/0操作的基本单位,每个控制区间含有一个或多个数据记录。

       ②顺序集和索引集
         顺序集和索引集一起构成一棵B+树,作为文件的索引部分。
         顺序集中存放的每个控制区间的索引项由两部分信息组成:该控制区间中的最大关键字和指向控制区间的指针。若干相邻的控制区间的索引项,形成顺序集中的一个结点。结点之间用指针相链接,而每个结点又在其上一层的结点中建有索引,且逐层向上建立索引,所有的索引项都由最大关键字和指针两部分信息组成。这些高层的索引项形成B+树的非终端结点。
         VSAM文件既可在顺序集中进行顺序存取,又可从最高层的索引(B+树的根结点)出发,进行按关键字的随机存取。顺序集中一个结点连同其对应的所有控制区间形成一个整体,称做控制区域(Control Range),它相当于ISAM文件中的一个柱面,而控制区间相当于一个磁道。

    (2)VSAM文件中控制区间的结构
         在VSAM文件中,记录可以是不定长的。因而在控制区间中,除了存放记录本身之外,还有每个记录的控制信息(如记录的长度等)和整个区间的控制信息(如区间中存放的记录数等),控制区间的结构如下表所示。

    【数据结构】文件:索引顺序文件 - 八月照相馆 - 八月照相馆
     

    (3)VSAM文件的插入方法

         VSAM文件中没有溢出区,解决插入的方法是在初建文件时留出空间:一是每个控制区间内并未填满记录,而是在最末一个记录和控制信息之间留有空隙;二是在每个控制区域中有一些完全空的控制区间,并在顺序集的索引中指明这些空区间。
         当插入新记录时,大多数的新记录能插入到相应的控制区间内,但要注意:为了保持区间内记录的关键字从小至大有序,则需将区间内关键字大于插入记录关键字的记录,向控制信息的方向移动。若在若干记录插入之后控制区间已满,则在下一个记录插入时,要进行控制区间的分裂,即把近乎一半的记录移到同一控制区域内全空的控制区间中,并修改顺序集中相应索引。倘若控制区域中已经没有全空的控制区间,则要进行控制区域的分裂,此时顺序集中的结点亦要分裂,由此需要修改索引集中的结点信息。但由于控制区域较大,通常很少发生分裂的情况。

    (4)VSAM文件的删除

         在VSAM文件中删除记录时,需将同一控制区间中,比删除记录关键字大的记录向前移动,把空间留给以后插人的新记录。若整个控制区间变空,则回收作空闲区间用,且需删除顺序集中相应的索引项。

    (5)VSAM文件的优点
         和ISAM文件相比,基于B+树的VSAM文件有如下优点:能保持较高的查找效率,查找一个后插入记录和查找一个原有记录具有相同的速度;动态地分配和释放存储空间,可以保持平均75%的存储利用率;而且永远不必对文件进行再组织。因而基于B+树的VSAM文件,通常被作为大型索引顺序文件的标准组织。
    展开全文
  • 数据库索引实践经验·关于数据库建索引和插数据两者先后顺序对效率的影响   案例2·新数据库建索引和导数据   (1) 先定义索引 (schema) 再 (2) load 数据 比 (2)(1)快的理论分析(前提是实践...
  • 索引(一):顺序索引(稠密索引,稀疏索引和B+树索引) (2014-12-09 18:43:00)转载▼ <table>
  • mysql组合索引与字段顺序

    千次阅读 2019-06-11 17:15:25
    多时候,我们在mysql中创建了索引,但是某些查询还是慢,根本就没有使用到索引!一般来说,可能是某些字段没有创建索引,或者是组合索引中字段的顺序与查询语句中字段的顺序不符。 看下面的例子: 假设有一张...
  • mysql的索引使用优先顺序

    千次阅读 2020-03-13 14:31:25
    这个时候首先想到的字段都对应了,还不对,那应该是顺序有问题了.咨询了大佬之后,更加确定了. mysql在索引使用的时候一般都会把数据最小的字段放前面,也就是最能确定结果的字段,因为索引的第一个字段的检索范围是最小...
  • 建立组合索引的字段顺序优化

    千次阅读 2019-01-14 21:39:25
    建立组合索引的字段顺序优化 简介 组合索引我们经常用到,建立组合索引大家也都会,但是如何考虑建立组合索引顺序是一个值得推敲的事情。 正文 1. 尽量把最常用的字段放在最前面 对于我们需要创建的组合索引,如果...
  • 索引B-Tree: 一般来说, MySQL 中的 B-Tree 索引的物理文件大多都是以 B+tree的结构来存储的,也就是所有实际需要的数据都存放于 Tree 的 Leaf Node,而且到任何一个 Leaf Node 的最短路径的长度都是完全相同的,...
  • GitHub 4.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 4.8k Star 的Java工程师成神之路 ,真的不来...相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。 因为索引...
  • 曾经,我以为我懂MySQL索引

    万次阅读 多人点赞 2020-08-26 09:04:17
    MySQL索引,我们真的了解么?腾讯云数据库负责人林晓斌说过:“我们面试MySQL同事时只考察两点,索引和锁”。...MySQL索引历经了多个版本的迭代,从语法到底层数据结构都有多改变。今天,让我们一起来看看吧
  • 索引

    千次阅读 多人点赞 2018-09-07 23:27:20
    索引是一种对数据库表中一列或多列的值进行排序的一种数据存储结构。 需要占用磁盘空间。 类型:普通索引,唯一索引,主键索引,复合索引,聚族索引。 唯一索引:不允许具有索引值相同的行,即每一行数据的索引的...
  • mysql索引详解

    万次阅读 多人点赞 2021-07-07 21:40:09
    分别为:表定义文件、数据文件、索引文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 InnoDB:所有的表都...
  • 多个单列索引和联合索引的区别详解

    万次阅读 多人点赞 2018-06-24 17:40:58
    那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。 一、联合索引测试 注:Mysql版本为 5.7.20 创建测试表(表记录...
  • 前面两篇文章 《解析B+树比B树更加适合做数据库索引的原因 》 和《从底层解析B+索引提高查询速度的原因》是从数据结构的角度分析了B+索引,并分别介绍了B+索引在两个主流存储引擎InnoDB和MyISAM中的实现。...
  • 索引结构和散列结构适用在外存与内存交互结构。顺序存储在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。特点:随机存取表中元素。插入和删除操作需要移动元素。链接...
  • 聚集索引引起数据库容易死锁

    千次阅读 2013-08-26 18:37:10
    数据库容易死锁,我后来发现是聚集索引引起的,索引填充因子是90,后来把聚集索引去掉,问题就解决了,但是有些人不明白聚集索引为什么会引起死锁?? 首先,填充因子设置得不对。 聚集索引代表了表中记录...
  • 索引的几原则

    千次阅读 2017-08-10 09:43:21
    1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序索引,d是用不到索引的,如果建立(a...
  •   完整源代码下载地址顺序查找简介  顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数逐个比较,直到找出与给定关键字相同的数为止。代码实现public ...
  • mysql的in查询是可以用到索引吗?亲测详解

    万次阅读 多人点赞 2019-04-09 17:41:19
    后来陆陆续续看到多博客,有的说in查询可以用索引,有的说不能用索引,所以博主就越发好奇起来。到底能不能用索引,绝对有个正确的答案,而不是这样的模棱两可。 二、in查询的一些总结     &...
  • InnoDB索引

    万次阅读 2019-08-05 16:30:09
    1.概述 InnoDB存储引擎支持一下几种索引 B+ 树索引 全文索引 哈希索引 2.B+ 树索引 ...B+树索引可以分为聚集索引(clustered inex)和辅助索引(secondary),其内部全是B+树结构,高度平衡。...
  • SQL SERVER 索引(3)——聚集索引

    千次阅读 2018-11-08 14:43:02
    聚集索引基于数据行的键值在表内排序和存储这些数据行,对磁盘上实际数据重新组织以按指定的一列或多列值排序,聚集索引顺序和数据表中数据存储的顺序是一样的。每个表只能有一个聚集索引,因为数据行本身只能按...
  • 而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,...
  • 索引的几原则1、最左前缀匹配原则,非常重要的原则mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配。比如a = 1 and b = 2 and c > 3 and d = 4,如果建立(a,b,c,d)顺序索引,d是用不...
  • mysql索引

    千次阅读 2013-12-03 14:33:52
    没有索引的情况下,我们查询一条记录,需要从第一条记录一直往下查询,知道查找到我们需要的记录,如果记录数特别的话,相当于大海捞针,速度特别慢 索引:建一个索引-----指向的是数据的位置-----反映到新华...
  • http://www.itpub.net/thread-1942951-1-1.html在oracle中,建立分区表,然后建立索引的时候有全局索引和本地索引,因为需要定时删除分区,所以建立本地索引,可以在查询的时候走索引,那么全局索引的意义是什么?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 380,794
精华内容 152,317
关键字:

索引的顺序影响很大吗