第二句中去掉ORDER BY,再将IN改成表关联。

解决方案 »

  1.   

    回:ORARichard(没钱的日子......) 
    我去掉ORDER BY也一样
    该成关联也一样(速度)
      

  2.   

    应该去掉ORDER BY 就行了啊。我刚刚在600万的测试数据当中执行你的那种操作,速度差不了o.x秒。在第二个表数据少的情况,速度是相差无几的。不可能出现你那个大的差距啊。如果相差太大,我想可能的原因是userroleinfo 这个表当中Userid 与iddbuser_account 中的account 相匹配的数据太多了,你可以试试userroleinfo 中只保留你列出的666666,88888,99999,88894,88895,50441这些个字段,看看速度差距
      

  3.   

    我觉得可能不是SQL语句的原因,建议在PLSQL中分析一下
      

  4.   

    当用in时,估计oracle以iddbuser_account为驱动表,这样要对表userroleinfo执行15万次索引查找或表扫描,因此会很慢。
    如果表userroleinfo的表中Userid是唯一的,且表iddbuser_account在account列有索引,则可以改写为:
    select b.* from iddbuser_account b, userroleinfo a where a.Userid+0=b.account;
    如果Userid是字符型,只要将Userid+0改为trim(Userid)。