索引的初探(一)

索引的初探(一)

以前听做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年5月18日
    136
  • zencart 模板设计「建议收藏」

    zencart 模板设计「建议收藏」ZenCart的模板设计比较复杂,需要一定的时间来熟悉。一旦你了解了它的结构,就会慢慢习惯了。首先要阅读常见问答部分的:如何添加、制作新模板。ZenCart的设计没有什么特别,与以前设计HTML页面是一样的。只是整个页面分成了好几个部分,并加入了PHP代码。通常,页面分为页眉(header),页脚(footer),边框(sideboxes)。所以设计页面的时候,要记住ZenCart是如

    2022年7月27日
    4
  • CentOS 6.4安装(超级详细图解教程)

    CentOS 6.4安装(超级详细图解教程)说明:1、CentOS6.4系统镜像有两个,安装系统只用到第一个镜像即CentOS-6.4-i386-bin-DVD1.iso(32位)或者CentOS-6.4-x86_64-bin-DVD1.i

    2022年7月3日
    19
  • windows 10安装sqlyog详细步骤

    windows 10安装sqlyog详细步骤sqlyog下载链接:链接:https://pan.baidu.com/s/1D_iRna8V90omfHsKHyeBtg提取码:bqht复制这段内容后打开百度网盘手机App,操作更方便哦1.下载完以后解压,双击SQLyog-12.0.9-0.x642.如下图,选择Ok3.如图,点击下一步4.选择“我接受“许可证协议”中的条款(A)”单击下一步…

    2022年5月28日
    76
  • 广州java培训哪家教育机构比较好_广州java培训课程

    广州java培训哪家教育机构比较好_广州java培训课程如今社会上的就业竞争非常激烈,许多公司都在不断的提高对求职者的需求,大家也逐渐的开始意识到掌握一项适用的技能是非常重要的,一技之长不仅能够给我们带来就业上的巨大优势,还能提高我们的薪资收入,让我们更上一层楼。正因如此,越来越多的同学选择在就业之前通过专业的IT培训机构掌握一项实用的专业技能,而Java成为了进入IT行业的敲门砖,而目前每个城市的Java培训机构都有很多,让人难以选择,经调查,大部分的同学会通过一些排名榜进行参考,而今天,排名榜小编为大家主要介绍广州Java培训机构排名,主要通过教学质量,

    2022年10月3日
    1
  • 软件测试中根据测试用例设计的方法,测试用例设计方法有哪些?举例说明[通俗易懂]

    软件测试中根据测试用例设计的方法,测试用例设计方法有哪些?举例说明[通俗易懂]众所周知,测试用例是编制的一组测试输入、执行条件及预期结果,专门为的是某个特殊目标,即测试某个程序路径,或是核实是否满足某个特定的需求。一般来讲,常用的测试用例设计方法有五种,分别是:正交实验法、边界值分析法、等价类划分法、判定表法、错误推测法。当然测试用例的设计方法不止这些,下面只是通过举例说明着重讲讲这常用的五种方法。一、正交实验法用语言描述正交实验法会很抽象难懂,简单说,就是在各因素互相独立…

    2022年6月29日
    19

发表回复

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

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