假设table表中有两列,number1 和number2
table表中有1000W条数据  number1列中随机存入1到1000W的数 number2中存出入1 或2
number1是主键 现在我执行sql语句 select * from table where number1=20  或者执行select * from table where number1=20 and number2=1(已知number1=20的列number2=1) 问第二个sql语句会不会比第一个sql语句快,或者慢

解决方案 »

  1.   

    语句1和语句2执的结果一样,也就是取的行数是一样的。由于语句1做的工作少(少一个filter),所以我认为是语句1要快一些实际上,为number1建上索引之后,2个sql的效率应该相差无几
      

  2.   

    应该是一样的,CBO的应该两条语句一样,RBO的就不一样了
      

  3.   

    经过试验加number2=1时间短些,不过差别不大24万条的情况下我求count,仅差别0.4秒。
    解释为number1=20只加这个条件的话还要判断number2是否=1,所以 还耗费了这点时间。
    所以得到结论第二个语句比第一个快!
      

  4.   

    慢或不慢, 口说无凭楼主可以分析执行计划, 
    任何SQL语句的执行都会换算成一个cost看cost大小即可
    如果是猜测, 我觉得1快
      

  5.   

    谁能给我具体讲讲,测试这两条语句的方法,需要什么工具。我如何才能得到一条语句的执行时间呢?5楼所说的执行计划怎么回事?如何换算成一个cost?
      

  6.   

    恩,我也想知道呢...什么是cost呢?详细点嘛
      

  7.   

    两个语句几乎是一样的,他们应该都会走number1上的主键索引,执行计划仅仅是该索引的unique scan。
    当然区别也是有的,但是只有一点点,那就是第二个语句得出结果后还有再判断下 number2的情况,会多这么一个filter,不过这个时间很短,几乎可以忽略。
      

  8.   

    没区别, 都走主键索引.跟filter number2无关, SQL解析器的时候就把number2=1优化掉了.
      

  9.   

    以前对数据库 没有太深的研究,怎样讲sql语句换算成cost?如何测试效率,是否需要相关的工具?有没有相关的资料
      

  10.   


    你有plsql developer吗?
    有的话写好sql直接按F5就行了, 既有执行计划又有代价
      

  11.   

    没有索引的情况下,第2条语句快些,Oracle的解析顺序是从右至左.