大数据量下索引的应用

大数据量下索引的应用

ID:6321778

大小:306.00 KB

页数:19页

时间:2018-01-10

大数据量下索引的应用_第1页
大数据量下索引的应用_第2页
大数据量下索引的应用_第3页
大数据量下索引的应用_第4页
大数据量下索引的应用_第5页
资源描述:

《大数据量下索引的应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、DocumentTitleSecurityLevel:大数据量下索引的应用作者:徐铭(54819)蔡小华(00101632)2009-11-28华为技术有限公司2021-06-19HUAWEIConfidentialPage1,Total19文档名称文档密级:目录一.引言3二.怎样使用索引才高效4三.什么时候使用复合索引7四.什么时候使用函数索引9五.如何使用分区索引10六.如何让优化器选择指定的索引12七.哪些情况下无法使用索引18八.总结182021-6-19华为机密,未经许可不得扩散第19页,共19页文档名称文档密级:大数据量下

2、索引的应用摘要:几乎所有的应用都会用到数据库,都需要从数据库中查询数据。而电信行业的数据库往往都是海量数据,从这种数据库中直接查询数据所等待的时间对于实时性要求很高的系统是不可接受的,而通过索引查询数据可以极大地缩短查询时间,满足实时性系统的要求,所以,我们需要为大数据量的表创建索引,索引是提高数据查询最有效的方法,也是最难全面掌握的技术,正确的索引可能使效率提高上万倍,而无效的索引可能浪费数据库空间,甚至大大降低查询性能。本文基于Oracle数据库,首先总结出高效使用B树索引的一般规律,然后分析了几种特殊形式索引的特性,并且分别给出

3、了使用建议,最后探讨了优化器选择索引的常用方法。关键字:数据库,Oracle,索引,性能,优化,数据查询一.引言Oracle数据库是当前主流的数据库之一,而B树索引是最常用的索引。B树索引有分支和叶子两种类型的存储数据块,所有叶子块都应该在同一层上,同时叶子节点都是双向链表,这样在进行索引区间扫描(indexrangescan)时,只需通过叶子节点的向前或者向后就可以了,无需再对索引结构进行导航。大多数情况下,B树索引的高度是2或者3,一般情况下,在索引中找到一个键只需要2或3次I/O。虽然索引可以极大的提高查询效率,但由于使用索引需

4、要一定的成本,不仅需要占用很多的磁盘空间,而且由于需要自动维护,会增加执行DML操作的成本,所以索引也不是创建的越多越好。一般而言,如果需要从一个大数据量的表中访问很小比例的行,那么就应该在这个表上建立索引。而下面几种情况下应不建或少建索引:l表的记录数太少。l经常插入、删除、修改的表。2021-6-19华为机密,未经许可不得扩散第19页,共19页文档名称文档密级:l数据重复且分布平均的表字段。l经常和主字段一块查询且主字段的选择率(列上不同取值的个数与数据总数的比值)非常高的表字段。上面列出的是建立索引的一般规律,但是当面对具体的查

5、询语句时,仅仅这些是远远不够的。只有深刻理解了索引的原理,掌握其内部的规律,才能在面对错综复杂的SQL语句时灵活高效的使用索引。本文重点阐述如何高效的使用B树索引,包括普通索引、复合索引、函数索引以及分区索引,最后介绍优化器是如何选择索引的以及哪些情况下无法使用索引。二.怎样使用索引才高效经常有人问这样的问题:使用这个索引好不好?使用哪个索引好?我们应该根据什么原则来判定一个查询语句是否应该使用索引以及使用哪个索引?对于初学者来说,确实较难把握。为了弄清楚这些问题,我们要先搞清楚索引访问的原理。简单的说索引扫描分为两步:(1)扫描索引

6、得到对应数据的地址(rowid)。(2)通过rowid从表中读出具体的数据。下面我们就来详细的探讨如何选择索引。1.如何衡量查询语句的性能一个查询耗费的资源分成3个基本组成部分:I/O代价、CPU代价、network代价。I/O代价是将数据从磁盘读入内存所需的代价,一般情况下,该代价是处理一个查询的主要耗费,因此我们衡量查询语句性能时一般忽略其他次要因素,只比较查询所产生的I/O总次数。如果要访问的数据块已经在内存中,就不需要物理I/O,而只做一次逻辑I/O,这部分代价与物理I/O相比要小很多,所以也可以忽略。2.全表扫描和通过索引来

7、访问表数据的对比首先需要明确全表扫描支持多块读,即一次I/O可以读取多个数据块(由db_file_multiblock_read_count参数设定一次读取的块数),而索引扫描的2021-6-19华为机密,未经许可不得扩散第19页,共19页文档名称文档密级:每步都是单独的一次I/O,不过由于经常使用,绝大多数索引块都已经CACHE到内存中,所以第1步的I/O经常是逻辑I/O,即数据可以从内存中得到。为了讨论方便,我们做如下假设:l每次索引扫描需要两次物理I/O,一次对索引块,一次对数据块l所有数据块在查询开始时都没有被读入内存中l多块

8、读的参数设定为20l表的数据量为1000万,每个数据块存储100条数据,即表中的数据块为10万个基于以上条件,作如下查询:(1)通过唯一索引的等值查询来访问表数据Select*fromtableAwhereid=-1假设

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

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

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