Loading...
  所在位置:论坛首页 -> 计算机科学与技术 -> Oracle专栏 -> 几条很基本的oracle操作(sql)常识
回复
 标题:几条很基本的oracle操作(sql)常识
第12楼 wanjianfei
编辑 删除 引用

第十三掌 使用nls_date_format

9

select * from record where  to_char(ActionTime,'mm')='12'

这个查询的执行计划将是全表查询,如果我们改变nls_date_format

SQL>alert session set nls_date_formate=’MM’;

现在重新修改上面的查询:

select * from record where  ActionTime='12'

这样就能使用actiontime上的索引了,它的执行计划将是(INDEX RANGE SCAN)。

回复时间:2009-4-28 17:37:06
第13楼 wanjianfei
编辑 删除 引用

第十四掌 使用基于函数的索引

前面谈到任何对列的操作都可能导致全表扫描,例如:

select * from emp where substr(ename,1,2)=’SM’;

但是这种查询在客服系统又经常使用,我们可以创建一个带有substr函数的基于函数的索引,

create index emp_ename_substr on eemp ( substr(ename,1,2) );

 

这样在执行上面的查询语句时,这个基于函数的索引将排上用场,执行计划将是(INDEX RANGE SCAN)。

回复时间:2009-4-28 17:37:28
第14楼 wanjianfei
编辑 删除 引用

第十五掌 基于函数的索引要求等式匹配

上面的例子中,我们创建了基于函数的索引,但是如果执行下面的查询:

select * from emp where substr(ename,1,1)=’S’

得到的执行计划将还是(TABLE ACCESS FULL),因为只有当数据列能够等式匹配时,基于函数的索引才能生效,这样对于这种索引的计划和维护的要求都很高。请注意,向表中添加索引是非常危险的操作,因为这将导致许多查询执行计划的变更。然而,如果我们使用基于函数的索引就不会产生这样的问题,因为Oracle只有在查询使用了匹配的内置函数时才会使用这种类型的索引。

回复时间:2009-4-28 17:38:28
第15楼 wanjianfei
编辑 删除 引用

第十六掌 使用分区索引

在用分析命令对分区索引进行分析时,每一个分区的数据值的范围信息会放入Oracle的数据字典中。Oracle可以利用这个信息来提取出那些只与SQL查询相关的数据分区。

例如,假设你已经定义了一个分区索引,并且某个SQL语句需要在一个索引分区中进行一次索引扫描。Oracle会仅仅访问这个索引分区,而且会在这个分区上调用一个此索引范围的快速全扫描。因为不需要访问整个索引,所以提高了查询的速度。

回复时间:2009-4-28 17:40:39
第16楼 wanjianfei
编辑 删除 引用

第十七掌 使用位图索引

位图索引可以从本质上提高使用了小于1000个唯一数据值的数据列的查询速度,因为在位图索引中进行的检索是在RAM中完成的,而且也总是比传统的B树索引的速度要快。对于那些少于1000个唯一数据值的数据列建立位图索引,可以使执行效率更快。

回复时间:2009-4-28 17:41:24
第17楼 wanjianfei
编辑 删除 引用

第十八掌 决定使用全表扫描还是使用索引

和所有的秘笈一样,最后一招都会又回到起点,最后我们来讨论一下是否需要建立索引,也许进行全表扫描更快。在大多数情况下,全表扫描可能会导致更多的物理磁盘输入输出,但是全表扫描有时又可能会因为高度并行化的存在而执行的更快。如果查询的表完全没有顺序,那么一个要返回记录数小于10%的查询可能会读取表中大部分的数据块,这样使用索引会使查询效率提高很多。但是如果表非常有顺序,那么如果查询的记录数大于40%时,可能使用全表扫描更快。因此,有一个索引范围扫描的总体原则是:

1)对于原始排序的表  仅读取少于表记录数40%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的40%的查询应该使用全表扫描。

2)对于未排序的表    仅读取少于表记录数7%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的7%的查询应该使用全表扫描。

回复时间:2009-4-28 17:43:13
高级回复

操作选项: 评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
  首页
Copyright 2006-2012 HistoryCreator.com Powered By: BBSGood 5
吉ICP备06005902号