为啥这样sql(oracle)语句执行速度比较快,原因
select * from table t where  t.a >= to_date('2013-01-15 08:00', 'yyyy-mm-dd hh24:mi')  or t.b >=to_date('2013-01-15 08:00', 'yyyy-mm-dd hh24:mi')  
快于
select * from table t where  nvl(t.a,t.b) >= to_date('2013-01-15 08:00', 'yyyy-mm-dd hh24:mi')
奇怪
              
              
------解决方案--------------------nvl(t.a,t.b)
===================
在字段名称上使用函数不是一个好习惯,这会导致索引失效,除非有相应的函数索引。
------解决方案--------------------选中sql语句,按F5,就可以看到查询计划
SELECT STATEMENT, GOAL = ALL_ROWS			3	11	187
 TABLE ACCESS FULL	MW_APP	MWT_GRADEINFO	3	11	187
这代表全表扫描
SELECT STATEMENT, GOAL = ALL_ROWS			1	1	17
 TABLE ACCESS BY INDEX ROWID	MW_APP	MWT_GRADEINFO	1	1	17
  INDEX UNIQUE SCAN	MW_APP	PK_MWT_GRADEINFO	0	1	
这代表走索引
另外,where条件里,一般都是左边是字段名,右边是值或条件,尽量把计算和函数放到右边
比如 where a.col/5 > 3 的效率要低于 where a.col > 3*5
------解决方案--------------------9楼说的对,
第一句如果在a,b上都有索引,查询就会直接通过索引查询,
第二句一般就是直接表扫描。
大数据量情况下差别很明显。