索引的作用与结构(数据库)

这篇具有很好参考价值的文章主要介绍了索引的作用与结构(数据库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、索引概述

1、什么叫索引

2、索引的作用

二、SQL Server索引下的数据组织结构

1.堆集结构

 2.聚集索引结构

3.非聚集索引

4.扩展盘区空间的管理


一、索引概述

1、什么叫索引

       数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。

         书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单

索引的作用与结构(数据库)

 文章来源地址https://www.toymoban.com/news/detail-443153.html

2、索引的作用

  • 通过创建唯一索引,可以保证数据记录的唯一性。
  • 可以大大加快数据检索速度。
  • 可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
  • 在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
  • 使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能

二、SQL Server索引下的数据组织结构

在 SQL Server 数据库内,索引对象作为 8 KB 页的集合存储。

SQL Server 支持视图上的索引。视图上第一个允许的索引是聚集索引。在视图上执行 CREATE INDEX 语句时,视图的结果集被具体化,并且存储在与有聚集索引的表具有相同结构的数据库中。

每个表或索引视图的数据行存储在 8 KB 数据页集合中。每个数据页都有一个 96 字节的页头,其中包含象拥有该页的表的标识符 (ID) 这样的系统信息。如果页链接在索引列表中,则页头还包含指向下一页及前面用过的页的指针。在页尾有行偏移表。数据行填充页的剩余部分。

索引的作用与结构(数据库)

1.堆集结构

堆集在 sysindexes 内有一行,其 indid = 0

sysindexes.FirstIAM 列指向 IAM 页链的 IAM 首页,IAM 页链管理分配给堆集的空间。

SQL Server 2000 使用 IAM 页在堆集中浏览。堆集内的数据页和行没有任何特定的顺序,也不链接在一起。数据页之间唯一的逻辑连接是记录在 IAM 页内的连接。

通过扫描 IAM 页可以对堆集进行表扫描或串行读,以找到容纳这个堆集的页的扩展盘区。因为 IAM 按扩展盘区在数据文件内存在的顺序表示它们,所以这意味着串行堆集扫描一律沿每个文件进行。使用 IAM 页设置扫描顺序还意味着堆集中的行一般不按照插入的顺序返回。

索引的作用与结构(数据库)

 2.聚集索引结构

  • 聚集索引对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即聚集索引与数据是混为一体的,它的叶节点中存储的是实际的数据。
  • 每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。
  • 应当在创建任何非聚集索引之前创建聚集索引。
  • 聚集索引的大小平均是表的5%。
  • 在创建索引时系统需要比索引的表1.2倍的磁盘空间,索引创建完成后自动回收。
  • 聚集索引在 sysindexes 内有一行,其 indid = 1。数据链内的页和其内的行按聚集索引键值排序。所有插入都在所插入行中的键值与排序顺序相匹配时执行。
  • SQL Server2000 将索引组织为 B 树。索引内的每一页包含一个页首,页首后面跟着索引行。每个索引行都包含一个键值以及一个指向较低级页或数据行的指针。索引的每个页称为索引节点。B 树的顶端节点称为根节点。索引的底层节点称为叶节点。每级索引中的页链接在双向链接列表中。在聚集索引内数据页组成叶节点。根和叶之间的任何索引级统称为中间级。
  • 对于聚集索引,sysindexes.root 指向它的顶端。SQL Server 沿着聚集索引浏览以找到聚集索引键对应的行。

索引的作用与结构(数据库)

 索引的作用与结构(数据库)

 在lname列上创建索引后,查询employee表可以看出表中记录是按lname值的顺序排列;删除lname列上的聚集索引,而在emp_id上创建聚集索引后,表中记录按照emp_id列值顺序排列。

3.非聚集索引

  • 非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序。非聚集索引的叶节点存储了组成非聚集索引的关键字值和行定位器。
  • 如果索引时没有指定索引类型,默认情况下为非聚集索引
  • 应当在创建非聚集索引之前创建聚集索引;
  • 每个表最多可以创建249个非聚集索引;
  • 最好在唯一值较多的列上创建非聚集索引;
  • 经常需要联接和分组查询,应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。
  • 非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别:

1、数据行不按非聚集索引键的顺序排序和存储。

2、非聚集索引的叶层不包含数据页。 相反,叶节点包含索引行。

  • 非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 SQL Server 中,非聚集索引中的行定位器有两种形式:

1、如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。

2、如果表有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。

 

索引的作用与结构(数据库)

4.扩展盘区空间的管理

索引分配映射表(IAM)页映射数据库文件中由堆集或索引使用的扩展盘区。

对于任何具有ntext、text和image类型的列的表,IAM页还映射分配给这些类型的页链的扩展盘区。

这些对象中的每一个都有由一个或多个记录所有分配给自己的扩展盘区的IAM页组成的链。

每个对象对每个包含扩展盘区的文件都至少有一个IAM。

如果分配给对象的文件上的扩展盘区的范围超过了一个IAM页可以记录的范围,则扩展盘区可能会在文件上有多个IAM页。

索引的作用与结构(数据库)

 IAM页按需要分配给每个对象,并在文件内随机定位。

Sysindexes.dbo.FirstIAM指向对象的IAM首页,这个对象的所有IAM 页用链条链接在一起。

IAM 页的页首说明IAM所映射的扩展盘区范围的起始扩展盘区。

IAM中还有大位图,该位图内的每个位代表一个扩展盘区。

位图的第一个位代表范围内的第一个扩展盘区,第二个位代表范围内的第二个扩展盘区,依此类推。

如果一个位是0,则不将它代表的扩展盘区分配给拥有该IAM的对象。如果这个位是1,则将它代表的扩展盘区分配给拥有该IAM页的对象。

索引的作用与结构(数据库)

 

 

到了这里,关于索引的作用与结构(数据库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 数据库为什么使用B+树而不是B树做索引

    数据库为什么使用B+树而不是B树做索引

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:MySQL的100个知识点。 🎉欢迎 👍点赞✍评论⭐收

    2024年02月10日
    浏览(12)
  • 数据结构与算法之美学习笔记:48 | B+树:MySQL数据库索引是如何实现的?

    数据结构与算法之美学习笔记:48 | B+树:MySQL数据库索引是如何实现的?

    本节课程思维导图: 作为一个软件开发工程师,你对数据库肯定再熟悉不过了。作为主流的数据存储系统,它在我们的业务开发中,有着举足轻重的地位。在工作中,为了加速数据库中数据的查找速度,我们常用的处理思路是,对表中数据创建索引。那你是否思考过,数据库

    2024年01月16日
    浏览(47)
  • 【从删库到跑路】MySQL数据库的索引(一)——索引的结构(BTree B+Tree Hash),语法等

    【从删库到跑路】MySQL数据库的索引(一)——索引的结构(BTree B+Tree Hash),语法等

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 🥰欢迎并且感谢大家指出小吉的问题 索引(index)是帮助MySQL 高效获取数据 的 有序 的 数据结构 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方

    2024年02月16日
    浏览(16)
  • [架构之路-236]:目标系统 - 纵向分层 - 数据库 - 数据库系统基础与概述:三阶段模型(概念模型、逻辑模型、物理模型)、三级模式结构(外模式、模式、内模式)

    [架构之路-236]:目标系统 - 纵向分层 - 数据库 - 数据库系统基础与概述:三阶段模型(概念模型、逻辑模型、物理模型)、三级模式结构(外模式、模式、内模式)

    目录 一、数据库设计阶段性模型:概念模型、逻辑模型、物理模型 1.1 概念模型(Conceptual Model)- 业务模型: 实体:entity 属性或特征: key键值/码: 域(Domain): 实体类型:entity type 实体集合: 联系: 1.2 逻辑模型(Logical Model)- 内存模型(最核心): 1.3 物理模型(Phys

    2024年02月02日
    浏览(53)
  • Laravel框架中的目录结构都有什么作用?

    Laravel框架中的目录结构都有什么作用?

    Laravel框架安装完成后,会在C:lwebwwwlapavel目录下自动创建一些文件和目录。本节来了解一下框架中各个目录的作用。 Laravel框架一级目录的作用如表所示。 在熟悉了一级目录的作用后,下面来看一下Laravel框架常用的子目录和文件的作用,如下表所示。

    2024年02月07日
    浏览(9)
  • 在Django的数据库模型的类中,通常还会定义一个名叫Meta的内部类,这个类有什么作用?

    在Django的数据库模型中, Meta 类是一个内部类,用于定义一些与模型相关的元数据(metadata)。它提供了一种在模型类中指定各种选项和配置的方式。 以下是 Meta 类的一些常见用途和作用: 定义模型的数据库表名: 通过 db_table 选项可以指定模型对应的数据库表的名称。例如

    2024年02月12日
    浏览(10)
  • 【数据库原理】(28)数据库设计概述

    数据库设计是为了实现数据库应用系统,涉及结构特性设计、行为特性设计和物理模式设计三个主要方面。 1. 数据库的结构特性设计 数据库的结构特性设计是数据库设计的关键,包括数据库结构的设计和建立合理的数据模型。这一部分也被称为数据库的静态结构设计。 步骤

    2024年01月19日
    浏览(13)
  • 【数据处理】建立数据库索引并定时重建索引

    【数据处理】建立数据库索引并定时重建索引

    给表 建立索引能加速查询 (我的习惯是给经常查询的列建立索引,如果经常查询的是id列,我会给将id设置为主键),长时间查询后会变慢(具体原因目前不清楚),公司前辈说 定期重建索引就可以解决问题 ,我就在 Microsoft Sql Server Management Studio 里设置了定时“自动重建索

    2024年01月25日
    浏览(8)
  • DB(一):数据库概述、SQL概述、Oracle数据类型

    包括Oracle、DB2、SQL Server、MySQL数据库概述;数据定义语言DDL、数据操作语言DML、事务控制语言TCL、数据查询语言DQL、数据控制语言DCL语言介绍;NUMBER 、CHAR、VARCHAR2、DATE数据库类型;CHAR和VARCHAR2的存储编码、CHAR和VARCHAR2的最大长度、LONG和CLOB类型。 1、DB和DBMS (1)、数据库(

    2024年02月09日
    浏览(52)
  • 【MySql】数据库索引

    【MySql】数据库索引

    可以简单理解为一本书的目录信息,是为了提升查找效率而建立的 1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查找字段设置索引; 2、在创建表时侯,使用 index 进行普通索引的声明 3、修改表结构,给指定的字段添加索引 alter table 表名 add index 索引名

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包