索引的初探(一)

索引的初探(一)

以前听做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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql的1045错误的解决方案_1045无法登录mysql

    mysql的1045错误的解决方案_1045无法登录mysqlwindows和linux中mysql1045错误解决方法

    2022年10月29日
  • plsqldev连oracle,plsqldev怎么联接oracle客户端

    plsqldev连oracle,plsqldev怎么联接oracle客户端如果你的电脑是64位的计算机,你需要安装64位的oracle客户端,但是PL/SQLdev目前没有64位的,因此你要手动设置一个32位的客户端。pl/sql不用装64位的,因为它能支持32位和64位。如果你的数据库是64位,那么你就得装一个Oracle32位的客户端,直接去oracle官方下载即可。安装完毕之后,需要进行配置:app\Administrator\product\11.2.0\…

    2022年5月6日
  • 究竟什么是POJO?

    究竟什么是POJO?     POJO(PlainOldJavaObject)这种叫法是MartinFowler、RebeccaParsons和JoshMacKenzie在2000年的一次演讲的时候提出来的。     我在做J2EE培训中发现我的很多学生问我什么是POJO,后来我在写书(《Spring2初学者实践教材》和《Spring2初学者实践教材》)的时候发现POJO这个概念无法回避。现在网上对于

    2022年5月28日
  • 云服务器搭建青龙面板每日自动拿京豆

    云服务器搭建青龙面板每日自动拿京豆前言:之前网上有只要扫码一下就可以每天领上百京豆和一些红包的活动,后来呢,扫码就失效了,但是呢,这背后的技术还没有失效。这白嫖活动其实就是用脚本代替我们去参与京东的各种活动,去获取红包和京豆,而这些脚本是部署在电脑上,定时去执行的,接下来,根据网上的大佬的教程,我们也来实现一下。每天100-200京豆不等,坐收渔利,快来试试吧。一、安装前的准备​青龙面板是使用Docker来安装的,理论上,只要有可以运行Docker的电脑都可以进行安装。但是呢,因为脚本要定时运行,所以最好安装在服务器上,或

    2022年10月14日
  • Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解[通俗易懂]

    Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解[通俗易懂]Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

    2022年4月21日
  • 全方位剖析QT 面试题 胡峰原创

    全方位剖析QT 面试题 胡峰原创自己毕业后参加过很多面试,当然有以应聘者的身份参加的也有以面试官的身份参加的,下面我想总结下一些面试官出题的方向和回答的技巧,下面截取我对一个应届毕业生的面试过程作为讲解,希望能对再今后的面试任职时有所帮助。姓名AAA性别男民族汉族籍贯河北省AA出生日期AAA婚姻状况否学历学士政治面貌AA专业计算机科学与技术健康情况健康毕业院校AAA邮编A联系电话AAA邮箱AA个人技能我学习了嵌入式方向所涉及的51单片机、操作系统、ARM、Qt等,期间做过许多小实验,单片机最经典的

    2022年6月25日

发表回复

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

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