首页 > 数据库 >【高级数据库】第二章 第01讲 数据库索引

【高级数据库】第二章 第01讲 数据库索引

时间:2022-12-21 14:37:25浏览次数:32  
标签:文件 01 数据文件 记录 数据库 索引 查找


【高级数据库】第二章 数据库索引

  在第一章我们主要介绍了数据库的基础知识,包括数据库和数据库管理系统的概念,了解了数据库管理系统是如何执行用户命令的。另外还回顾了数据库有关的基础内容,包括三级模式和二级映像、关系代数、SQL语句、函数依赖和范式等。由于本课程并非主攻如何使用数据库,而是深入了解数据库的运行原理和实现策略,因此从本章开始将会讲解有关数据库实现原理的内容。
  本章将率先讲解数据库的索引。索引的设置可以大大提高数据库查找的效率。数据库的索引与数据结构的索引相似,旨在通过索引这种数据结构提高查询的效率,减少对磁盘的I/O。
(1)索引是一种数据结构,它以一个或多个字段的值为输入并能“快速地”找出具有该值的记录。
(2)建立索引的字段(组合)称为查找键,亦称

第01讲 索引基础

  在索引结构中主要包含两个部分:数据文件索引文件。数据文件为储存在磁盘或少量存储在主存的待查询的文件集合。数据文件可以保存一个关系。一般来说,数据文件(即关系元组)包含主码和其他属性,在主码上构建索引则是主索引,在其他属性上构建的索引是辅助索引。数据文件一般根据实际情况划分多个块,称为数据块。索引文件是建立查找键与数据记录之间的关联,其包含数据文件的查找键以及指向对应数据文件记录的指针。索引文件也分为多个索引块
  顺序文件是指对关系中的元组按照主码进行排序而生成的文件。换句话说,顺序文件中是根据主码的顺序依次排列。为了方便描述,假设一个数据块中只有两条记录,且每条记录的键值为10的倍数。

1、稠密索引

  稠密索引是指索引文件中保存每个数据文件的键以及对应的指针。稠密索引文件中的索引块保持键的顺序与文件排列顺序一致。


【高级数据库】第二章 第01讲 数据库索引_数据库

如图所示,右侧为数据文件,每个文件按照键进行排序,左侧索引文件中每个记录保存数据文件的每个键即对应的指针。稠密索引支持按照给定键值查找相应记录的查询。当查询键为60的记录时,首先在索引文件中查找到键为60的记录,其次在根据对应的指针指向的磁盘地址查询相应的记录。可发现设置索引的好处就是只需要执行一次I/O。如果直接在磁盘中对每个记录进行查找,则需要多次I/O。

2、稀疏索引

  稀疏索引只为数据文件的每个存储块设置一个键-指针对。如图所示:


【高级数据库】第二章 第01讲 数据库索引_数据文件_02

那稀疏索引如何进行查找呢?假设查找键60的记录,已知每个数据块中只有两个记录,索引地址跨度为20,对应索引文件中每个记录的键跨度也为20。因此在索引文件中查找60,则需要查找10、30、50、70…中60所在区间的最大值,可知60在键为50的区间内,因此查找对应的指针指向的数据记录块。根据数据块中已排序的记录,可通过顺序超找或二分查找等方式找出键为60的记录。

3、多级索引

  多级索引是指在索引文件的基础上再建立一层索引。建立多级索引一般均采用稀疏索引。如图所示:


【高级数据库】第二章 第01讲 数据库索引_高级数据库_03

4、辅助索引

  辅助索引可用于任何索引目的,有助于查找给定一个或多个字段值记录。前面描述过,辅助索引是建立在记录非主码的其他属性上,因为主码是唯一标识一条记录的键,而非主码属性不完全能够指定唯一的记录,因此辅助索引无法与主索引一样决定数据文件的地址。辅助索引总是稠密索引。如图所示:


【高级数据库】第二章 第01讲 数据库索引_索引_04

如图,由于数据文件的非主码属性可能存在多个记录,因此对应在这个属性上建立的辅助索引也会有多个键,如果要查询某个属性的键值,会可能在多个数据块中存放多个记录。辅助索引的索引文件中则相应的按照键的顺序排列,且相同键值的数量与数据文件中相同键值数量相等,指针则分别指向某一个符合键的记录。
  例如存在两个关系 【高级数据库】第二章 第01讲 数据库索引_高级数据库_05

【高级数据库】第二章 第01讲 数据库索引_数据库_06

【高级数据库】第二章 第01讲 数据库索引_索引_07

考虑根据证件号 【高级数据库】第二章 第01讲 数据库索引_高级数据库_08 的经理所在制片厂制作的所有电影,SQL语句可写为:
  【高级数据库】第二章 第01讲 数据库索引_辅助索引_09
  【高级数据库】第二章 第01讲 数据库索引_数据库_10
  【高级数据库】第二章 第01讲 数据库索引_辅助索引_11

首先为键 【高级数据库】第二章 第01讲 数据库索引_索引_12 建立索引,可得到所有满足xxx的记录,因为 【高级数据库】第二章 第01讲 数据库索引_索引_12 是主码,所以可通过主索引建立索引。而 【高级数据库】第二章 第01讲 数据库索引_高级数据库_14 中对属性 【高级数据库】第二章 第01讲 数据库索引_高级数据库_15 的索引则为辅助索引。可将所有满足 【高级数据库】第二章 第01讲 数据库索引_数据库_16 的电影记录聚集到相应的 【高级数据库】第二章 第01讲 数据库索引_索引_17


【高级数据库】第二章 第01讲 数据库索引_数据文件_18

5、间接辅助索引

  我们知道辅助索引中索引文件中的键的个数与数据文件中对应键记录的个数相同,因此如果当满足某个键的记录数很大是,索引文件也会很大,不利于空间存储。因此可以通过在索引文件和数据文件中间添加一个数据结构——


【高级数据库】第二章 第01讲 数据库索引_高级数据库_19

假设一共有 【高级数据库】第二章 第01讲 数据库索引_数据库_20 个键,可知索引文件中有 【高级数据库】第二章 第01讲 数据库索引_数据库_20 个键,每个键的指针指向桶文件中对应的桶,桶文件一共有 【高级数据库】第二章 第01讲 数据库索引_数据库_20 个桶,每个桶存放相同的键对应数据文件的指针。桶与数据文件之间是辅助索引。
  例如关系 【高级数据库】第二章 第01讲 数据库索引_数据文件_23

【高级数据库】第二章 第01讲 数据库索引_辅助索引_24
  【高级数据库】第二章 第01讲 数据库索引_数据库_25
  【高级数据库】第二章 第01讲 数据库索引_数据库_26
可知两个属性均为非主码属性,因此需要辅助索引,为了提高查询效率,节省内存空间,我们采用间接辅助索引。首先为属性 【高级数据库】第二章 第01讲 数据库索引_数据库_27 建立间接辅助索引,查询所有指向键值为“Disney”的指针,同理为属性 【高级数据库】第二章 第01讲 数据库索引_数据库_28


【高级数据库】第二章 第01讲 数据库索引_高级数据库_29


上一讲:​​数据库基础知识概览​​下一讲:B-树


  博客记录着学习的脚步,分享着最新的技术,非常感谢您的阅读,本博客将不断进行更新,希望能够给您在技术上带来帮助。


标签:文件,01,数据文件,记录,数据库,索引,查找
From: https://blog.51cto.com/u_15919249/5959903

相关文章

  • 【高级数据库】第一章 第01讲 数据库概述
    【高级数据库】第一章DBMS系统概述  博主学院最近有关于高级数据库的课程,为了很好的记录高级数据库的相关知识点,开辟了以《数据库系统实现(第二版)》为基础,结合学院课程具......
  • 【高级数据库】第一章 第02讲 DBMS概述
    【高级数据库】第一章DBMS系统概述  上一讲主要介绍数据库、数据库管理系统、数据仓库等的基本概念。本节详细讲解数据库管理系统的原理。第02讲DBMS概述  DBMS又称数......
  • 数据库连接池
    池化技术:准备一些预先的资源,过来就连接预先准备好的编写一个连接池,实现一个接口DataSource 开源数据实现:DBCPC3P0Druid使用了这些数据库连接池之后,就不需要编写连......
  • C# Oracle数据库连接并执行类
    OracleHelper.cs usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Text;usingSystem.Data;usingSystem.Con......
  • C# SQLServer数据库连接并执行类
    SQLHelper.cs usingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Linq;......
  • 2012,Normalization of spectro-temporal Gabor filter bank features for improved r
    paperDOI:10.21437/Interspeech.2012-493......
  • MySQL统计某个数据库中有多少张表
    在一些命令行下无法查看某个数据库一共有多少张表的时候,可以采用下面的SQL语句SQL语句SELECTcount(*)TABLES,table_schemaFROMinformation_schema.TA......
  • Windows Server 2012 R2 Standard安装mellanox网卡驱动
    原因:我的系统是WindowsServer2012R2Standard首先我是想要安装mellanox网卡驱动,然后系统让我安装WindowsServer2012R2安装补丁KB2999226思路:经过网上查找资料安装......
  • MySQL 索引的创建、删除
    MySQL中索引的创建有三种方法,索引的删除有两种方法。一、创建索引(1)使用createindex#1.创建普通索引createindex索引名on表名(列名[(限制索引长度)]);#2.创建......
  • ArcObjects SDK开发 018 Geometry
    1、Geometry体系结构如果要看完整的Geometry体系结构,那么可以去查看帮助中的类结构图,非常完整和严谨。可以通过下图方式打开。点击打开后,会发现里面的结构非常复杂。但......