关于数据库索引的探讨

阅读: 评论:0

2024年9月21日发(作者:)

关于数据库索引的探讨

龙源期刊网

关于数据库索引的探讨

作者:杨军莉

来源:《电子世界》2013年第06期

【摘要】现在企业之间数据交流的各种数据量的急剧增长,且要求数据处理及时,这对数

据库的处理能力方面提出了更高的要求。数据库索引可以有效地提高数据的查询处理效率,如

何合理地设置索引并优化索引,则要考虑到方方面面的要求,本文通过对数据库的索引技术进

行了研究,论述如何合理设置索引,以期给数据库设计者和系统开发者提供参考。

【关键词】数据库索引;聚集索引;非聚集索引;查询优化

由于计算机网络技术的迅猛发展,企业间数据交流的各种数据量的急剧增长,不但要求处

理的结果要准确,而且也要求处理速度及时,这对数据库的处理能力能力方面提出了更高的要

求,如何设置有效的数据库索引达到数据库优化是本文要讨论的重点。

应用索引的过程其实类似于查新华字典,比照数据库的概念,新华字典里的拼音检字法和

部首检字法就是新华字典的两种不同的索引,而新华字典的正文则相当于表同时创建索引并不

会改变表中的数据的物理位置,它只是创建了一个新的数据结构指向数据表。比起逐一查阅字

典正文查找某一个具体的汉字,显然不管使用哪种检字法都可以很快地在字典正文中找到这个

汉字,这就是使用索引的给我们带来的好处。如何准确高效地从海量的信息中查询到想要的数

据,已成为数据库设计人员的首要任务。

所以我们可以从逻辑上简单地认为,索引是一个单独的、物理的数据结构,它主要包含两

列内容,第一列是从表或视图中的列或列的组合所生成的键值的集合,且根据键值以升序或降

序排列。这一列类似于新华字典的音序,它以字母升序排列,即A在最前,而Z在最后。索

引的另外一列则是指向表中这些值的数据页的逻辑指针的集合。这一列则类似于对应音序的页

码。索引依赖于表,作为表的组成部分,由数据库系统自动维护,是对数据库表中一个或多个

列的值进行排序的数据结构,不同的索引对应不同的排序方法。一个表的存储是由两部分组成

的,一部分是用来存放数据的数据页面,另一部分是用来存放索引的索引索引页面,通常索引

页面比数据页面小得多。

假设表中的数据在磁盘上存储是有序的,那么当在数据库在进行插入数据、删除数据和更

新数据时,则一定会导致数据的顺序会发生变化,为了保证数据的连续性和有序性,就需要重

新移动数据,改变它们的物理位置,而种移动将会导致增大磁盘的I/O操作,使得整个数据库

运行非常缓慢;使用索引的主要目的是使数据逻辑有序。为了实现数据逻辑有序,实际上索引

的物理结构是一个双向链表,使用双向链表来保证数据的逻辑顺序,如果要对表中的一个已有

结点进行更新则仅需修改该节点的前驱和后继,而且无需修改该节点的物理位置;如果要在两

个节点中插入一个新的节点只需修改节点的前驱和后继,而且无需修改新节点的物理位置;如

龙源期刊网

果要删除一个已有结点,则仅需修改其前驱结点的后继为该被删除结点的后继。总的来说,索

引保存着具体数据的物理地址值。

索引从大的方面分为聚集索引和非聚集索引。所谓聚集索引是指表中数据的物理顺序是和

索引的顺序是一至的,数据页是聚集索引的叶节点,数据页之间通过双向链表的形式连接起

来,而且实际的数据都存储在数据页中。查询时,数据库首先根据索引查找,找到索引值后,

接着查找该索引的数据页(叶节点)获取具体数据。如果没有索引,则查询时会进行全表的遍

历。第二类索引则称为非聚集索引,非聚集索引是物理存储不按照索引排序,非聚集索引的叶

节点(IndexLeafPages)包含着指向具体数据行的指针或聚集索引,数据页之间没有连接是相

对独立的页。具体地来说,非聚集索引又分为:①堆表非聚集索引在没有聚集索引的情况下,

表中的数据页是通过堆(Heap)形式进行存储,堆是不含聚集索引的表;SQLServer中的堆存

储是把新的数据行存储到最后一个页中。非聚集索引通过双向链表连接,而叶节点包含指具体

数据行的指针。堆表中查询信息时,首先遍历索引,获取到指针信息,再根据指针信息获取相

应数据页中的数据。②聚集表非聚集索引当表上存在聚集索引时,任何非聚集索引的叶节点就

不是指针值,而是包含聚集索引的索引值。非聚集索引依然通过双向链表连接,但叶节点包含

的是索引表的索引值。在聚集表中查询信息时,首先遍历索引,获取索引值,然后根据索引值

获取相应数据页中的数据。

数据库查询表主要通过以下五种方式:

①TableScan:扫描整个表,这个操作将会逐行检查整个表,直到找到所匹配的记录行或者

扫描完整个表。可以看出,这种查找记录的方式效率是最差的。

②IndexScan:根据索引,按照一定的算法从表中过滤出来一部分记录,在过滤出来的这一

部分记录中进行查找所匹配的记录行,显然这种方式比第一种方式的查找范围要小,因此比

TableScan的查找效率高。

③IndexSeek:根据索引,直接定位(获取)记录的存放位置,然后根据获取的记录的存放

位置,直接取得记录,因此,比TableScan、IndexScan快。

④ClusteredIndexScan:与TableScan相似,这种方式也是要遍历整个表,但是它与

TableScan不同的是数据表中的记录已经按照聚集索引来排列了,即记录实际就是按聚集索引

的来顺序存放的。而TableScan扫描的表只是没有建立聚集索引,表中的记录没有按照一定的

顺序存放,因此这两个操作本质上是一样的。

⑤ClusteredIndexSeek:这种方式是直接根据聚集索引获取记录,因为表中的记录已经按照

聚集索引排列了,所以是最快的查询方法。

龙源期刊网

一个表是不是索引越多越好呢,当然不是。因为增加索引后,会增加维护该索引的时空开

销,修改数据表时,必须要更新相应字段的索引。当一个表中的索引过多时,也严重会影响性

能。一般会考虑在经常查询的列上建立相关索引并及时删除不需要的索引。

总之,索引使数据库引的查询操作执行的速度更快,它可以有针对性的数据检索,而不是

简单地整个表扫描(FullTableScan)。在数据库中,为表添加必要的索引会提高查询的执行效

率,但是过多的索引必然需要更新和维护索引表,这将会导致系统性能下降,所以必须控制索

引的数量及时删除不必要的索引。

参考文献

[1]曹素丽,杨延广.ORACLE数据库索引的设计与维护研究[J].微型电脑应用,2012

(11):29-31.

[2]马守东.关系数据库索引的研究和探索[J].信息与电脑(理论版),2011(10):159-160.

[3]张效尉,姜静.内存数据库技术研究[J].软件导刊,2011 (10):147-148

[4]涂刚,刘华清,傅伟.数据表结构的研究[J].天水师范学院学报,2009(5):86-88.

[5]岳国华.提高ORACLE8i数据库响应速度的若干技术对策[J].计算机应用与软件,2004

(5):110-112.

作者简介:杨军莉(1976—),女,陕西咸阳人,陕西财经职业技术学院讲师,研究方

向:数据库、高职教育研究。

关于数据库索引的探讨

本文发布于:2024-09-21 20:06:44,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/1726920404435633.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   数据库   聚集   记录   查询   表中   节点   研究
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23