在连表前where更快还是连表后where呢

两种方式
left join dual b on a.a = b.b where b.c = 1

left join (select * from dual where c = 1) b on a.a=b.b
第一种肯定是会把在字段c<>1的情况下 把a.a的数据都干掉
第二种则是a的数据是绝对安全的
如果这两种写法结果都一样的情况下 例如 a和b之间是1对多的关系,不存在写法影响数据的情况下
哪种会更快呢,如果可以结合有索引和没索引讨论更好

个人经验,先where再join效率更高
可以造几张假表测试下

“如果这两种写法结果都一样的情况下”

这个意思是不是指a.a在b.b中都会存在?
如果是的话,为何要用left join呢?直接join不好么?比如

select * from a,b where a.a=b.b and b.c=1

让sql简单一点,oracle的优化器会更容易判断该如何执行更快,反正就只有两个表。
另外就是数据量及索引的问题了,你说a和b之间是一对多,那么a.a上肯定有索引吧,而且大概率是唯一索引,然后b.c作为条件,那么这个索引可以选择b.b和b.c的联合索引或者b.c的单独索引,这个要看数据量和其他的查询场景了。
以过去的经验来看,如果磁盘读写速度快,内存大且效率高,足够让很多个表join起来时,就简单点写,oracle比你想的能做到更多(虽然也有跑偏的时候。。。);但是如果表多且数据量大而且逻辑复杂时,是不能那么粗犷的把所有表都join到一起的,内存可能抗不住,最优的执行计划也难以识别,此时一般是拆分成多个sql阶段,写临时表再来处理,降低内存使用的平均消耗