虽然两条语句执行的结果是相同的,但第二条语句好。
第一语句的“and b.学号 like '9901%'”与前面给出的条件重复,产生冗余。
差异在两条语句在执行前须经Oracle的编译。

解决方案 »

  1.   

    oracle会把冗余的条件去掉的。
    两条语句性能应该是一样的!
    你可以trace一下!另外:你这里根本没有用到索引带来的优越性!select * from table where a like 'xxx%'
    与a有没有索引没有关系,like是全表搜索。
    如果:
    select * from table where a > xxx;
    则:
    效率因为索引的存在而得到提高!
      

  2.   

    首先你就是要建立索引,按照学号。
    其次用like '9901%'会按照索引检索,而不是全表扫描,只有象like '%9901%'这样的才会全表扫描。
    然后你的这两个SQL都不是最优化的,比较好的是:
    select a.学号,a.名,b.成绩 from 资料 a,成绩 b 
    where a.学号 like '9901%' and a.学号=b.学号
    最后是你要学会自己看SQL的执行计划
      

  3.   

    oracle编译器在解释sql语句时是从后往前找的也就是说一般写语句时就将返回最少记录的条件写在最后面这样就能带来性能的提高个人赞同qxm的看法