索引在中的应用分析

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的 索引可能使效率提高10000倍,而无效的 索引可能是浪费了数据库空间,甚至大大降低查询性能。




 


索引的管理成本



1、 存储 索引的磁盘空间



2、 执行数据修改操作(INSERT、UPDATE、DELETE)产生的 索引维护



3、 在数据处理时回需额外的回退空间。




 


实际数据修改测试:



一个表有字段A、B、C,同时进行插入10000行记录测试



在没有建 索引时平均完成时间是2.9秒



在对A字段建 索引后平均完成时间是6.7秒



在对A字段和B字段建 索引后平均完成时间是10.3秒



在对A字段、B字段和C字段都建 索引后平均完成时间是11.7秒



从以上测试结果可以明显看出 索引对数据修改产生的影响




 


索引按存储方法分类



B*树 索引



B*树 索引是最常用的 索引,其存储结构类似书的 索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于 索引到的具体的书页。一般 索引及唯一约束 索引都使用B*树 索引



位图 索引



位图 索引储存主要用来节省空间,减少ORACLE对数据块的访问,它采用位图偏移方式来与表的行ID号对应,采用位图 索引一般是重复值太多的表字段。位图 索引在实际密集型OLTP(数据事务处理)中用得比较少,因为OLTP会对表进行大量的删除、修改、新建操作,ORACLE每次进行操作都会对要操作的数据块加锁,所以多人操作很容易产生数据块锁等待甚至死锁现象。在OLAP(数据 分析处理)中应用位图有优势,因为OLAP中大部分是对数据库的查询操作,而且一般采用数据仓库技术,所以大量数据采用位图 索引节省空间比较明显。




 


索引按功能分类



唯一 索引



唯一 索引有两个作用,一个是数据约束,一个是数据 索引,其中数据约束主要用来保证数据的完整性,唯一 索引产生的 索引记录中每一条记录都对应一个唯一的ROWID。




 


主关键字 索引



主关键字 索引产生的 索引同唯一 索引,只不过它是在数据库建立主关键字时系统自动建立的。



一般 索引



一般 索引不产生数据约束作用,其功能主要是对字段建立 索引表,以提高数据查询速度。




 



 


索引索引对象分类




 


单列 索引(表单个字段的 索引



多列 索引(表多个字段的 索引



函数 索引(对字段进行函数运算的 索引



建立函数 索引的方法:



createindex收费日期 索引onGC_DFSS(trunc(sk_rq))



createindex完全客户编号 索引onyhzl(qc_bh||kh_bh)



在对函数进行了 索引后,如果当前会话要引用应设置当前会话的query_rewrite_enabled为TRUE。



altersessionsetquery_rewrite_enabled=true



注:如果对用户函数进行 索引的话,那用户函数应加上deterministic参数,意思是函数在输入值固定的情况下返回值也固定。例:



createorreplacefunctiontrunc_add(input_datedate)returndatedeterministic



as



begin



   returntrunc(input_date+1);



endtrunc_add;




 


应用 索引的扫描分类



INDEXUNIQUESCAN(按 索引唯一值扫描)



select*fromzl_yhjbqkwherehbs_bh='5420016000'



INDEXRANGESCAN(按 索引值范围扫描)



select*fromzl_yhjbqkwherehbs_bh>'5420016000'



select*fromzl_yhjbqkwhereqc_bh>'7001'



INDEXFASTFULLSCAN(按 索引值快速全部扫描)



selecthbs_bhfromzl_yhjbqkorderbyhbs_bh



selectcount(*)fromzl_yhjbqk



selectqc_bhfromzl_yhjbqkgroupbyqc_bh




 


什么情况下应该建立 索引



表的主关键字



自动建立唯一 索引



如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)



表的字段唯一约束



ORACLE利用 索引来保证数据的完整性



如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)



直接条件查询的字段



在SQL中用于条件约束的字段



如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)



select*fromzl_yhjbqkwhereqc_bh=’7001’ 1 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值