索引的初探(一)

索引的初探(一)

以前听做DBA的朋友说索引能解决数据库百分之八十的问题,我也开始简单的写几篇关于索引的随笔,顺便来总结一下我理解的索引以及相关的知识,毕竟进步在于总结。

简介:

     索引是数据库中一个排序的数据结构,以协助快速查询、更新数据库表中数据。我的理解就像是一本书,没有目录你也可以正常阅读,但是想要直接去读某个章节则需要全书寻找,太耽误时间了。所以索引就想目录一样帮助我们去直接定位文章的章节(数据的位置)。

索引结构:

      在SQL Server中,索引(聚集索引)存储结构是一样的,都是B树。如图所示:

QQ截图20150324111954

索引 B 树中的每一页称为一个索引节点。B 树的顶端节点称为根节点。索引中的底层节点称为叶节点。根节点与叶节点之间的任何索引级别统称为中间级。在聚集索引中,叶节点包含基础表的数据页。根节点和中间级节点包含存有索引行的索引页。每个索引行包含一个键值和一个指针,该指针指向 B 树上的某一中间级页或叶级索引中的某个数据行。每级索引中的页均被链接在双向链接列表中。

对于数据库的检索和查询而言,当没有索引的时候就需要在包含表的数据的所有磁盘(数据页)进行全盘扫描,这样无疑非常消耗时间。通过对索引的根节点和叶子节点的扫描大大减少了磁盘IO,从而提高了效率。

下面我们通过一个例子来说明一下:

12

左图是没有加索引的表,读取大于某个时间段的数据时逻辑读取(IO)了4808次;然后右图添加了查询字段的索引后,锐减为1792次,可见在加入了索引以后改变了对表数据的检索和方式大大提高了读取速度。

创建、删除和修改索引的语法:

1.创建索引的语法:

CREATE [UNIQUE][CLUSTERED | NONCLUSTERED]  INDEX  index_name 

ON {table_name | view_name} [WITH [index_property [,….n]]

说明:

UNIQUE: 建立唯一索引。

CLUSTERED: 建立聚集索引。

NONCLUSTERED: 建立非聚集索引。

Index_property: 索引属性。

2.删除索引语法:

DROP INDEX table_name.index_name[,table_name.index_name]

说明:table_name: 索引所在的表名称。

index_name : 要删除的索引名称。

3.修改索引

ALTER INDEX {<name of index> | ALL} ON<table or view name>{ REBUILD [[ WITH [index_property ]…]}

索引的缺点:

1创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
2索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
3当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

总结:

今天我们先从索引的概念和结构原理上来了解了索引的一般机制,以及对数据检索带来哪些基本好处,我们知道了索引的一般语法和缺点。作为一个优化数据库的工具索引是我们使用数据库不可或缺的工具,这篇作为开端只是简单介绍,接下来我将开始对索引进行分类详述包括:聚集和非聚集,索引的实践分析以及索引的维护等方面,预计本周完成其中一二。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119756.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月24日 下午11:00
下一篇 2021年11月25日 上午6:00


相关推荐

  • dsp McBSP模块「建议收藏」

    dsp McBSP模块「建议收藏」McBSP,是多通道缓冲串行接口。在DSP嵌入式系统中,常常用来连接音频编码解码芯片,串行AD/DA器件等。具有如下特性:全双工;两个数据缓冲寄存器;独立的发送和接收帧和时钟;多达129通道的发送和接收等等。McBSP结构图如下:首先对引脚进行介绍:CLKR:接收时钟CLKX:发送时钟CLKS:外部时钟源DR“:串行数据接收DX:串行数据发送

    2022年5月21日
    162
  • 一步步学“养龙虾”|完整安装运行攻略

    一步步学“养龙虾”|完整安装运行攻略

    2026年3月14日
    2
  • PLSQL安装步骤

    PLSQL安装步骤PLSQL安装注意事项1、安装下载PLSQL安装包,解压,默认安装选择自己需要的版本安装,一路默认即可2、添加客户端路径解压instantclient_11_2.rar放到自定义目录下,我是放在D盘下的Tools目录没有配置客户端,是无法登陆的,所以先不登录进入:找到plsql的configure–>preferences,如图配置,完成后重启即可3、配置tnsnames文件在客户端解压的目录“D:\Tools\instantclient_11_2”下创建NE

    2022年6月15日
    38
  • netperf 与网络性能测量

    netperf 与网络性能测量http www ibm com developerwor cn linux l netperf 在构建或管理一个网络系统时 我们更多的是关心网络的可用性 即网络是否连通 而对于其整体的性能往往考虑不多 或者即使考虑到性能的问题 但是却发现没有合适的手段去测试网络的性能 当开发出一个网络应用程序后 我们会发现 在实际的网络环境使用中 网络应用程序的使用效果不是很理想 问题可能出

    2026年3月16日
    2
  • stm32开发板套件

    stm32开发板套件

    2026年3月15日
    2
  • Python 运算符和表达式

    Python 运算符和表达式作者 billy 版权声明 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处运算符运算符是一些特殊的符号 主要用于科学计算 比较大小和逻辑运算等 Python 中的运算符主要包括算术运算符 赋值运算符 比较运算符 逻辑运算符和位运算符 使用运算符将不同类型的数据按照一定的规则连接起来的式子 称之为表达式 下面我们学习一下最常用的一些运算符 算术运算符算术运算符是处理四则运算的符号 在数字的处理中应用得最多 常用的算术运算符如下表所示 运算符说明举例结果

    2026年3月17日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号