网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 性能调优 > Oracle语句优化规则汇总(8)-性能调优  

Oracle语句优化规则汇总(8)-性能调优

2008-02-20  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

1. 用UNION替换OR (适用于索引列)

  通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果。 对索引列使用OR将造成全表扫描。注意, 以上规则只针对多个索引列有效。 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低。

网管u家u.bitscn@com

  在下面的例子中, LOC_ID 和REGION上都建有索引。

网管论坛bbs_bitsCN_com

  高效:

网管网www_bitscn_com

  SELECT LOC_ID , LOC_DESC , REGION
  FROM LOCATION
  WHERE LOC_ID = 10
  UNION
  SELECT LOC_ID , LOC_DESC , REGION
  FROM LOCATION
  WHERE REGION = “MELBOURNE”
中国网管联盟bitsCN.com

  低效:

网管bitscn_com

  SELECT LOC_ID , LOC_DESC , REGION
  FROM LOCATION
  WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
网管论坛bbs_bitsCN_com

  如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面。 网管网www_bitscn_com

  注意:

网管联盟bitsCN@com

  WHERE KEY1 = 10 (返回最少记录) 网管联盟bitsCN@com

  OR KEY2 = 20 (返回最多记录) 网管bitscn_com

  ORACLE 内部将以上转换为

网管u家u.bitsCN.com

  WHERE KEY1 = 10 AND((NOT KEY1 = 10) AND KEY2 = 20) 网管论坛bbs_bitsCN_com

  :

网管联盟bitsCN@com

  下面的测试数据仅供参考: (a = 1003 返回一条记录 , b = 1 返回1003条记录)

网管网www.bitscn.com

 

网管联盟bitsCN@com

网管bitscn_com


TAGs   汇总   性能   规则   优化   语句       索引   OF   INDEX   SQL   记录      
 上一篇:Oracle语句优化规则汇总(7)-性能调优   下一篇:Oracle语句优化规则汇总(9)-性能调优
Oracle语句优化规则汇总(8)-性能调优 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: