男:15万
2007-6-23:5万条
select  count(*) from account.user_after  where   to_char(reg_date,'yyyy-MM-dd')='2007-06-23' and sex='男';
select  count(*) from account.user_after  where   sex='男' and to_char(reg_date,'yyyy-MM-dd')='2007-06-23';
请问高手,这二个sql语句有区别吗?

解决方案 »

  1.   

    理论上where后的条件顺序是有区别的,但是10g后已经做了优化,实际没有区别。但是你对日期to_char肯定影响速度,应该改成reg_date>= to_date()
      

  2.   

    转:   
      WHERE子句中的连接顺序.     
            ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,   那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.     
      例如:     
      (低效,执行时间156.3秒)     
      SELECT   …     
      FROM   EMP   E     
      WHERE   SAL   >   50000     
      AND   JOB   =   ‘MANAGER’     
      AND   25   <   (SELECT   COUNT(*)   FROM   EMP     
                                WHERE   MGR=E.EMPNO);     
      (高效,执行时间10.6秒)     
      SELECT   …     
      FROM   EMP   E     
      WHERE   25   <   (SELECT   COUNT(*)   FROM   EMP     
                                WHERE   MGR=E.EMPNO)     
      AND   SAL   >   50000     
      AND   JOB   =   ‘MANAGER’;   
      

  3.   

    wuchunyu002的是oracle8或者9版本时,关于性能的描述吧。
    10g应该能够自动优化的。