Oracle Where子句研究结论
创始人
2024-06-12 05:11:21
0

在向大家详细介绍Oracle Where子句之前,首先让大家了解下ORDER BY子句,然后全面介绍用Oracle Where子句替代ORDER BY:
◆ORDER BY 子句只在两种严格的条件下使用索引。
◆ORDER BY中任何的列必须包含在相同的索引中并保持在索引中的排列顺序。
◆ORDER BY中任何的列必须定义为非空。

Oracle Where子句使用的索引和ORDER BY子句中所使用的索引不能并列。例如: 表DEPT包含以下列:

  1. DEPT_CODE PK NOT NULL  
  2. DEPT_DESC NOT NULL  
  3. DEPT_TYPE NULL 

避免改变索引列的类型:

当比较不同数据类型的数据时, Oracle自动对列进行简单的类型转换。 假设 EMPNO是个数值类型的索引列:SELECT … FROM EMP WHERE EMPNO = ‘123'。 实际上,经过Oracle类型转换, 语句转化为: SELECT … FROM EMP WHERE EMPNO = TO_NUMBER(‘123') 。

幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变。现在,假设EMP_TYPE是个字符类型的索引列:SELECT … FROM EMP WHERE EMP_TYPE = 123 。

这个语句被Oracle转换为: SELECT … FROM EMP WHERETO_NUMBER(EMP_TYPE)=123。因为内部发生的类型转换,这个索引将不会被用到! 为了避免Oracle对您的SQL进行隐式的类型转换,***把类型转换用显式表现出来。注意当字符和数值比较时,Oracle会优先转换数值类型到字符类型。

需要当心的Oracle Where子句:

某些SELECT 语句中的Oracle Where子句不使用索引。这里有一些例子:
(1)‘!=' 将不使用索引。记住, 索引只能告诉您什么存在于表中, 而不能告诉您什么不存在于表中。
(2)‘||'是字符连接函数。就象其他函数那样, 停用了索引。
(3)‘ '是数学函数。就象其他数学函数那样, 停用了索引。
(4)相同的索引列不能互相比较,这将会启用全表扫描。
a. 假如检索数据量超过30%的表中记录数,使用索引将没有显着的效率提高。
b. 在特定情况下,使用索引也许会比全表扫描慢,但这是同一个数量级上的区别。而通常情况下,使用索引比全表扫描要块几倍乃至几千倍!

避免使用耗费资源的操作:

带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎执行耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作,而其他的至少需要执行两次排序。通常,带有 UNION, MINUS , INTERSECT的SQL语句都能够用其他方式重写。假如您的数据库的SORT_AREA_SIZE调配得好。使用UNION , MINUS, INTERSECT也是能够考虑的, 毕竟他们的可读性很强。

【编辑推荐】

  1. 详谈Oracle LogMiner工具
  2. 揭开Oracle LogMiner之谜
  3. 简单描述Oracle Clob类型
  4. 概述Oracle 10g服务器
  5. 简介Oracle xmltype

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...