| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果。 对索引列使用OR将造成全表扫描。注意, 以上规则只针对多个索引列有效。 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低。
在下面的例子中, 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
| SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE” |
如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面。 网管网www_bitscn_com
注意:
网管联盟bitsCN@com
WHERE KEY1 = 10 (返回最少记录) 网管联盟bitsCN@com
OR KEY2 = 20 (返回最多记录) 网管bitscn_com
ORACLE 内部将以上转换为
WHERE KEY1 = 10 AND((NOT KEY1 = 10) AND KEY2 = 20) 网管论坛bbs_bitsCN_com
:
下面的测试数据仅供参考: (a = 1003 返回一条记录 , b = 1 返回1003条记录)
网管联盟bitsCN@com
网管bitscn_com
|
0
|
评论加载中…