- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析索引在SQL语句中使用技巧
浅析索引在SQL语句中使用技巧
摘 要:随着信息化的不断深入发展,数据的量呈现出几何级增长。而伴随着数据量的不断攀升,如何提高对数据库的访问性能成为每个信息系统的重点优化方向。索引技术是数据库性能优化中最常用的技术手段。以目前最流行的Oracle数据库为例,对数据库中索引的使用进行重点说明和举例,使读者对SQL语言中的索引技术有较深的了解。
关键词:索引;SQL语言;优化;数据库
中图分类号:TN911 文献标识码:A 文章编号:2095-1302(2015)04-00-03
0 引 言
在DBMS中,索引是访问数据库中数据的重要手段,特别是在大型系统中,更是必备方法。如果说数据库是一本字典,其中的数据是字典的内容,那么,索引就是这本字典的目录。查字典可以使用偏旁部首、汉语拼音、笔画等不同的方法进行查找,查询数据库中的数据也有各种各样的索引可供使用。在数据库中,索引使用DML操作可以迅速找到表数据,不用对整张表逐行访问。索引是一种结构很强的方案对象,它将数据和存放数据的位置对应起来。对于数据量非常大的表来说,通过全表扫描来访问和通过索引来访问,速度可能有是数量级上的差别。
索引能通过事先保存的索引键,按照一定顺序记录数据的位置,由此替代DML操作原本要进行的全表扫描,通过“以空间换时间”的方法,牺牲少量的存储空间,换取快速的反应时间。在一张表上是否该建立索引、建立怎样的索引、怎样才能有效利用建立起的索引是数据库优化中最常见的问题。
1 SQL语句的执行过程
是否会使用索引要从Oracle执行查询的机制开始分析。在Oracle进行必要的语法检查和语义分析之后,会自动对语句进行优化,其目的就是找到最高效的运行路径。可能会使用的优化器有两种:RBO基于规则的优化器,CBO基于成本的优化器。默认情况下是CBO优化器,它会快速统计数据量的大小, 选择开销最小 (尽量消耗最少的CPU和I/O)的执行计划。确定了执行计划之后,Oracle会将SQL语句格式化为内部执行代码。
由此可见,想要提高SQL语句的性能,就要从优化器会选择怎样的执行计划这块考虑。如果表上没有建立索引,执行计划就是全表扫描,它会根据PGA中的系统设定,读取一批数据块,如果表数据较小,全表可以一次性全部读入;如果数据量很大,则需要多次读取数据块。如果在数据量稍大的表上建立了索引,优化器会比较利用索引和全表扫描的读取数据次数,如果利用索引代价小,则选择利用索引,否则还是选择全表扫描。一般来说,查询语句要读取10%以上的数据量的话,优化器就宁愿选择全表扫描,而不是索引。因为一个索引项指向了一个数据块,所要读取的数据块太多,就有大量的I/O操作要进行,反而降低性能。
2 索引的分类
建立怎样的索引。常见的索引有以下几种:B*索引(包含唯一索引),位图索引,函数索引,本地前缀分区索引,全局范围分区索引等。
(1)B*树索引
B*树索引就是利用建立B树,将索引列和指向表中各行的rowid组织起来,按照顺序建立一颗平衡树,根据索引列的数量,自动建立合理高度的B树。在B树索引中,所有叶子的深度一样,结构自动保持平衡,在增删改之后都由Oracle自动维护。更重要的是,B树索引可以适应多种查询条件,包含范围查找、=、=、like和完全匹配。由于树的高度是基于索引列的数量,当访问的数据量占总数据的10%以上的时候,需要访问B树的范围太大,这个时候,其优势无法体现。
(2)位图索引
当某一列上的值可选择性较低的时候,一般使用位图索引。所谓的“可选择性”就是指查询这一列的distinct值与这一列所有值的比例,这个比值越高,说明可选择性越高。对于 “性别”列,只存在两种值,可选择性低;“姓名”列,可选择性一般较高。
(3)函数索引
通过在某一列上利用函数来创建索引。例如:create INDEX idx_func_sub on emp substr(empno,1,2);就是利用substr函数,在empno上建立索引。
3 使用索引的方法和技巧
(1)对于索引的建立,我们一般选择在可选择性高的列上建立索引。以地税系统的一张登记表为例,这张表记录了纳税人的登记信息,一个纳税人识别号对应一条记录,纳税人所属的区县对应字段dwid。在识别号sbh和区县dwid上分别建立索引IDX_SWJ_SBH和IDX_SWJ_dwid。如果有查询语句:
select * from glfw_swdj_tempwyp where sbh=’12345’ and dwid=’54321’;
查看执行计划如图1所示,执行计划没有使用IDX_SWJ_dwid,因为sbh列的可选性要远高于dwid
您可能关注的文档
最近下载
- 外墙清洗施工合同电子版.docx VIP
- 中国共产党入党积极分子培养考察登记表(入党积极分子培养考察情况).doc VIP
- 云南省2023年中考英语试题(附解析).pdf VIP
- 一年级拼音练习声母韵母整体认读音节(可以打印发给学生).pdf VIP
- 《汉中市学校食堂食品安全管理规范》DB6107 T70-2025.docx VIP
- DB34_T3713-2020_公路工程无人机倾斜摄影测量技术规程_安徽省.docx VIP
- 教育部高等职业学校设置标准(暂行).pdf
- 人教版高中生物必修1课时分层作业含答案共24套.doc VIP
- 抗日阵亡将士录.pdf VIP
- 2025年汽车驾驶员技师资格证书考试及考试题库含答案.docx
文档评论(0)