索引的应用

来源:互联网 发布:荆州网络电视垄上行 编辑:程序博客网 时间:2024/06/01 09:28
关于索引的应用
1.背景:为什么什么要用索引?
目前随着ERP系统的使用更加深化,数据量增长的速度越来越快,这个时候对于OLTP系统来说,对于性能速度的要求更高了,这个时候数据库服务产商为了满足
这个方面要求,设计出一种索引功能,便于我们更快的去检索数据,而索引思想已经在我们生活中很常见了,EG:我们查字典有时候是从索引页开始寻找的,去
图书馆寻找书籍的时候也是采用了索引的想法,不必要去从整个图书馆去一本一本的寻找自己的想要的书籍。现在数据库也是一样的,它通过再内存中建立一个
索引的数据结构,这个结构通过记录文件的ROWID,来达到快速定位的具体数据的要求。


2.什么是索引?种类,数据结构,优劣势分析
                    简述                             原理                                         优势                      劣势                
 
B树索引         默认索引 应用型最广               B树数据结构来记录分之块和叶子块       快速检索                占用空间 


位图索引        主要使用与OLAP系统,低基数字段    通过bit01来记录具体位置               空间小,过滤多个逻辑组合         适用更新删除很少的情况


全文索引        主要适用于中文


反向位图索引     避免竞争,1002,2234,3298,反向建立索引,   2001,4322,8923


基于函数的索引   有些需要建立索引在自定义函数上,这个时候需要建立索引,会通过函数计算出结果,然后再建立索引




3.什么时候用索引?
当我们估计我们系统的业务情况,某表的数据量规模会很大时,我们需要考虑在数据库层次去通过空间换取时间的策略来加快我们检索数据的速度,我们通过建立
索引,例如B树索引,这样,我们去检索500万的数据量和5万的数据量时,是没什么区别的。


在OLAP系统时,我们可以用位图索引来建立快速检索的索引。


4.在哪里用索引?
索引也是和表一样属于数据库的对象,我们也是建立在数据库里面。


5.索引建立流程?
当建立B树索引的时候,我们首先会在对我们建立索引字段里面的内容去进行一个排序,然后将排序的内容置于B树叶子节点里面,这个里面会去记录ROWID以及
我们列字段的值,其实这个也是一种浪费,因为当我们找到叶子节点的时候,是需要通过叶子节点里面的Rowid去查询表,其实就是先通过去索引里面找,然后
再去具体的表里面去找。


6.关于分区应用
通常我们建立表的时候,如果我们能够提前知道表以后存储的是一个大规模数据量的表,并且我们需要对里面某个字段去进行分区,例如年份,我们通过需要删除某个
年份的数据,这个时候如果我们delete * from table where fdata<xxxx 这种情况 假如该数据量有2000万条,那么这个时候,数据库资源就很紧张了,但是,如果
我们通过建立分区的话,那么我们删除仅仅需要秒级即可删除全部。


trancute 用该命令来执行之后,多余空间可供其他表使用,并且不会产生日志,但是同时也不能进行回滚的操作了。


drop


7.关于外键引用 导致 操作驱动表的时候,去锁定子表而产生了等待的情况,用索引可以解决该表锁的情况。
insert dept value(10)
insert dept value(20)
insert dept value(30)


insert emp values(1,20)
insert emp values(2,10)
insert emp values(3,20)


delete dept where fid = 30 这个时候删除30对于子表来说,是没有问题的,可是如果关联的外键没有索引的话,那么两个回话同时操作情况下,对于子表是已经
进行了锁定,在一个会话没有commit的情况下,是不能提交的。而如果加了索引的话,那么就可以定位数据了,在删除30的情况不会有问题。


8.关于复合索引的性质 前缀性 跳跃式索引扫描
select * from t where a b c 
在这个查询条件中  abc ab ac 的情况下,索引都会生效的。
而bc b c 在一般情况下是不会生效的。但是oracel提供了一种新的功能,在a 不在前导列的情况下,会去将a 的情况穷举进行组合。


9.关于执行计划,优化器的理解,基于规则,以及基于花销 的理解,以及怎么去写更快的SQL
我们可以通过 explain rule ,set trace on 等命令来查看oracel执行的情况,我们通常可以通过查看 一致性获取次数 和DB物理获取情况为总次数,来判断此次
执行情况。


in between 等范围如果确定的情况下,优化器会转化为 or and 等命令。

原创粉丝点击