oracle 查询语句条件多速度会快些吗?

先写一个存储过程从一个视图中取出符合条件的数据放到一个中间表,然后再写一个视图从这个中间表中取数据,为什么第二个视图中间表中取数据时,把从第一个视图中取数据时的存储过程中的条件加上条件后查询的数据会快些。其实中间表中的数据是已经通过存储过程中的条件过滤过的数据。
我通过一个存储过程prc1从视图v1中取一部分符合条件的数据到中间表t1。insert into t1 as select ...from v1 where currency='CNY'等条件。然后再写一个视图v2,从中间表t1中取数据,如create or replace view v2 as select * from t1。大体意思是这样的,不过实质上过程里面向t1中插数据时条件有几个,而视图v2也比较复杂,我在视图v2中加上向t1中插数据时的条件会比不加这些条件的查询数据会快些,其实表t1中的数据已经复合条件啦,为什么我在v2中查询时加上条件还会快些呢?

因为Oracle执行时有一个特性:已经执行过一遍的sql,再次执行时,Oracle不会重复查询数据,而是会直接调用上一次查询的结果,所以速度会快上很多。

你的问题我也没太看明白,写的太不清楚了,不过大体意思应该跟上面的原理有关系。第一次执行存储过程时,procedure里的sql已经执行过一遍,得出结果A,再次在该存储过程上加上条件进行查询的话,那么Oracle不会重复执行sql,而是直接在A的基础上进行二次查询,所以速度会快上很多。而不是你所理解的查询条件越多,速度越快。

查询条件的多寡和执行速度不一定挂钩,如果查询条件中的字段有索引,自然速度快,没有的话,就很慢了。说白了,查询条件速度是和索引挂钩的。

希望对你有所帮助

针对补充:其实你说的还是有点糊度- -

对于数据库的查询速度而言,影响查询时间的主要因素并不是查询条件的多寡,而是IO接口的传输数据的速度,因为数据库的自查时间远小于IO的传输时间。你查询出的最终结果数量比较少,那么IO需要传输的数据少,自然速度快;如果数据多,那么IO接口需要传输的数据量大,速度自然降下来了……所以如果条件可以的话,还是多加点限制条件比较好,这样Oracle的反应速度快点。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-20
太多了,看着有点头疼。
看标题,解释是WHERE条件过滤的越多,不一定代表速度快,查询速度由索引等控制,推荐查询时候看一下EXPLAIN PLAN.
第2个回答  2010-07-19
看着有点乱

查询条件越多只能代表查询的数据越准确,并不代表会更快,相反,条件越多,查询速度可能越慢
第3个回答  2010-07-19
好像绕口令。。。
相似回答