利用索引提高查询效率

利用索引提高查询效率

ID:5805291

大小:33.50 KB

页数:3页

时间:2017-12-25

利用索引提高查询效率_第1页
利用索引提高查询效率_第2页
利用索引提高查询效率_第3页
资源描述:

《利用索引提高查询效率》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、利用索引提高查询效率如果查询结果仅为一行或很少几行时(高选择性highselectivity),利用索引进行查询会大大提高效率。相比之下,如果没有索引,查询则只能顺序扫描整个表。在OLTP环境下,事务处理在很大程度上依赖于索引。只有在表很小时,才会顺序扫描表。系统会根据SQL语句中的WHERE子句判断是否使用索引。顺序扫描表会使系统性能受到严重影响。sysmaster中sysptntab表中的pf_seqscnas列显示了所进行的顺序扫描。SETEXPLAIN命令同样可以提供关于SQL语句如何访问数据库中的重要信息。DSS环境中的

2、应用经常会查询出大量数据(低选择性lowselecviity),甚至整张表。顺序扫描对于这样的查询更为适合,因为此时顺序扫描可以利用lightscan。lightscan缓冲区位于共享内存的虚拟段与驻留段无关。关于lightscan,以后章节中还将详述。建立索引的代价虽然索引可以很大地提高高选择性查询的性能,但维护这些索引是需要付出代价的。以INSERT语句为例,在进行插入时系统首先将读取被插入表的索引以定位新记录关键字的位置。然后系统在将新记录写入数据页的同时还必须将新索引项写入索引节点。如果导致索引节点分裂,系统则必须多次写索

3、引页与INSERT语句相似,DELETE语句也要求读入整个索引以定位索引节点位置,并置上删除标志。在删除索引时还需要处理索引节点合并、整理等问题。在执行UPDATE语句时,必须首先定位并且删除旧的关键字然后插入新的关键字。所以在UPDATE语句必须两次读取索引。在实际系统中通常把索引的根节点和第一级节点读入共享内存中,但如果需要访问更低层次的索引节点则必须进行磁盘操作。索引类型通常建立分离索引(detached)或基于表达式的索引分片(expressionbasedfragmented)。分离索引和分片索引可以使得索引的exten

4、t内页连续,因而能提高性能。而对于不分片的表来说,附加索引(attached)在建立索引时,索引页和数据页交叉存放在一起,因而会增加磁头寻找时间。对于中、小型表应该建立分离索引。对于经常访问的大表应建立基于表达式的分片索引,以减少索引页的数量和提高检索速度。索引分片不宜太多,以免表达式计算开销过大。根据索引的大小,一般可以分为4片。索引分片不支持轮转法(roundrobin)。分离式索引与数据页分别存放在不同的数据空间中。例如:CREATEINDEXindex1ONTABLEtable_name(col1)inidxldbs;基于

5、表达式的分片索引在FRAGMENTBYEXPRESSION子句指定的数据空间中创建。例如:CREATEINDEXindex1onTABLEtable_name(col1)FRAGMENTBYEXPRESSIONcol1>=0andcol1<=25000inidxldbs1col1>=25001andcol1<=50000inidxldbs2col1>=50001andcol1<=75000inidxldbs3col1>=750001andcol1<=100000inidxldbs4;隐式索引在定义约束条件时如果没有可利用的索引,系

6、统将创建隐式索引。用户不能对隐式索引指定数据空间的位置、分片策略或者填充因子。隐式索引创建在数据库(而非表)所在地数据空间中,这给磁盘管理和性能带来了一些影响。用户如果需要建立约束条件,最好能先创建与约束条件完全匹配的显式索引然后用ALTERTABLE命令增加约束条件。这样该约束条件就可以利用显式索引而不必再建立隐式索引。例如按如下方式:CREATETABLEtable_name(col1INTEGER,col2INTEGER,col3CHAR(25),)intableldbs;CREATEuniqueINDEXindex1ONT

7、ABLEtable_name(col1)inidxldbs;ALTERTABLEtable_nameADDCONSTRAINTPRIMARYKEY(col1);而不要按如下方式:CREATETABLEtable_name(col1INTEGER,col2INTEGER,col3CHAR(25),PRIMARYKEY(col1))intableldbs;FILLACTOR(填充因子)对于SELECT操作,将FILLFACTOR设为100对于SELECT和DELETE操作将FILLFACTOR设为100对于INSERT和UPDATE操

8、作将FILLFACTOR设为50到70CREATEINDEXindex1ONTABLEtable_name(col1)inidx1dbsFILLFACTOR70;填充因子决定了在建立索引时每一索引页的填充度。该参数是可以改变的。参数FILLFACT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。