请问where语句的顺序是佛会影响效率
比如where后面大概有7 8个判断,这个顺序会不会影响到执行效率。
------最佳解决方案--------------------9i及以前的RBO会,10g及以后一般用CBO,顺序就没影响了。
------其他解决方案--------------------CBO对where后面的字段顺序没有影响的
------其他解决方案--------------------会的
......
------其他解决方案--------------------
这位达人,比如我这么判断where t.state=0 and t.date >=某个日期 and。。。。,其余的都是在第一个基础上集合的判断。这会影响么?
------其他解决方案--------------------
如果你的state这个字段的值很单一,例如0和1,那么查询的时候速度应该没什么太大影响,如果值的类型很多的话。。。那么还是把 日期 加在前面吧。。。
------其他解决方案--------------------不是很清楚,依稀记得,where 后 ,越能缩小结果范围的条件放越后面,效率越高
------其他解决方案--------------------
对啊。我貌似也记得是这样的。我测试10g发现没什么影响。不知道是不是我测试的问题。
------其他解决方案--------------------研究发现好像放前面对速度是有提高。。。
------其他解决方案--------------------我看的书上是说where后面的条件判断是从右往左运行的,所以将越能缩小范围的值越放在右边。
------其他解决方案--------------------是有影响的,虽说有CBO,但也不是什么情况下都会选择CBO的。。。
------其他解决方案--------------------会影响效率的
------其他解决方案--------------------按顺序比较妥当
------其他解决方案--------------------Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当Oracle处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。
Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
------其他解决方案--------------------
一般我把时间条件放末尾,楼主可以试试!
------其他解决方案--------------------条件顺序:
10g以前采用rule优化方式时,有影响;
10g以后无影响,因为只支持基于cost优化方式(rule参数仍然保留支持),cost时要为查询对象建立statistics信息;
除了顺序,条件的多少会影响基于cost优化下的执行方式(有可能全表扫描,有可能遵循索引);
条件多不一定查询快,条件少也不一定查询快,需要自己去跟踪查询计划或预期业务数据变化来决定使用多少个条件(当然此处条件是指可以过滤同一范围数据的条件);
------其他解决方案--------------------看来LZ可以结贴了
------其他解决方案--------------------以前我们公司有个高手教我们说 where条件后面越是容易分类的条件就远离where条件越模糊的就靠近where 经供参考!
------其他解决方案--------------------会的.
越是能缩小范围的条件越靠后.
------其他解决方案--------------------会的!!
------其他解决方案--------------------