我先给大家看两个SQL,大家看看那个执行更快:
SQL1:
select * from table a where to_char(a.create_time,'yyyy-MM-dd hh:mm:ss')>'2014-11-26'
SQL2:
select * from table a where create_time>to_date('2014-11-26 00:00:00','yyyy-mm-dd hh24:mi:ss');
说说这连个SQL的区别,SQL1把表create_time字段转为char后再和'2014-11-26'对比,这样的执行结果是,数据库要把每条数据的这个字段都进行转换。
第二个很好解释,把要对比的字段转为date类型,然后让数据库create_time字段和这个值做对比。
实际执行效果显而易见,第二条语句要比第一条语句快数倍。而且第一条由于需要很多转换,查询的同时也严重影响了数据库的性能。
对于这样的SQL,我的建议是,虽然数据库已经很智能,还是要尽量让数据库少做事情。这样的SQL就是个很好的例子,理论上这两条SQL语句执行都是同样的效果,但是第一条明显就是让数据库多做了非常多的事情。
而实际中,这样简单的问题总是被忽略,所以强烈建议大家实时关注数据库优化和SQL的调优。