免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6707 | 回复: 10
打印 上一主题 下一主题

探讨:SQL WHERE多条件时,是从小到大还是从大到小 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-23 11:05 |只看该作者 |倒序浏览
我一直认为当SQL WHERE语句中包含多个条件时,应该将能够最大地减少数据范围的条件写在前面,而对于一些较模糊导致数据量大的条件写后面。这样在检索时,搜索量和计算量可以小一些,以使SQL的运行速度加快。

但昨天与同事讨论时,他说ORACLE写条件时应该将条件由大到小。当然了,他自己的认识和我是一致的。

请问 ORACLE SQL 的WHERE子句是否有这样的约定?

论坛徽章:
0
2 [报告]
发表于 2006-08-23 11:12 |只看该作者
应该将能够最大地减少数据范围的条件写在后面,oracle对sql的解析是从后向前的.

这个不太熟,大致是这样

论坛徽章:
0
3 [报告]
发表于 2006-08-23 11:21 |只看该作者
原帖由 doni 于 2006-8-23 11:12 发表
应该将能够最大地减少数据范围的条件写在后面,oracle对sql的解析是从后向前的.

这个不太熟,大致是这样


为什么是这样? 斑竹能不能给个实例?

论坛徽章:
0
4 [报告]
发表于 2006-08-23 11:54 |只看该作者
如果SQL是从后向前解析的,就容易理解了

论坛徽章:
0
5 [报告]
发表于 2006-08-23 12:42 |只看该作者
这只是解析顺序..

如果使用cbo的话, 系统会自动调整顺序的..

论坛徽章:
0
6 [报告]
发表于 2006-08-23 14:02 |只看该作者
原帖由 jametong 于 2006-8-23 12:42 发表
这只是解析顺序..

如果使用cbo的话, 系统会自动调整顺序的..

我记得应该是这样的,用cbo可能有所不同

另外用index的条件也可以向后放,field=value的向后放,a.field1=b.field2这种要向前放
大致这样的原则

论坛徽章:
0
7 [报告]
发表于 2006-08-23 14:07 |只看该作者
原帖由 blue_stone 于 2006-8-23 11:21 发表


为什么是这样? 斑竹能不能给个实例?


从后向前解析的问题可以这样证明:
  1. <SQL>desc testtable
  2. ...
  3. field1 ...
  4. field2 ...
  5. ...

  6. <SQL>select * from testtable
  7.   where a = 0
  8.        and b = 0      //a b 都不是testtable的字段
  9. <SQL>/
  10.    and b= 0
  11.        *
  12. ERROR at line 3:
  13. ORA-00904: invalid column name
  14. <SQL>select * from testtable
  15.   where b = 0
  16.        and a = 0
  17. <SQL>/
  18.    and a= 0
  19.        *
  20. ERROR at line 3:
  21. ORA-00904: invalid column name
复制代码


这样可以证明了吗?

论坛徽章:
0
8 [报告]
发表于 2006-08-23 14:24 |只看该作者
原帖由 doni 于 2006-8-23 14:07 发表


从后向前解析的问题可以这样证明:
[code]<SQL>desc testtable
...
field1 ...
field2 ...
...

<SQL>select * from testtable
  where a = 0
       and b = 0      //a b 都不是testta ...

可以证明语法分析是从后向前的,但是执行的时候是**只**依赖条件的顺序么?

论坛徽章:
0
9 [报告]
发表于 2006-08-23 14:53 |只看该作者
回LS:
应该不只是这样的,实际的情况可能要复杂一些,特别是CBO下
到底是如何,还是以执行计划为准

论坛徽章:
0
10 [报告]
发表于 2006-08-29 16:13 |只看该作者
在 RBO中,写sql的规则就是这样的
大表在前,小表在后
能过滤多部分记录的条件在后,使用索引的条件尽量靠后
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP