应该去掉ORDER BY 就行了啊。我刚刚在600万的测试数据当中执行你的那种操作,速度差不了o.x秒。在第二个表数据少的情况,速度是相差无几的。不可能出现你那个大的差距啊。如果相差太大,我想可能的原因是userroleinfo 这个表当中Userid 与iddbuser_account 中的account 相匹配的数据太多了,你可以试试userroleinfo 中只保留你列出的666666,88888,99999,88894,88895,50441这些个字段,看看速度差距
我觉得可能不是SQL语句的原因,建议在PLSQL中分析一下
当用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)。
我去掉ORDER BY也一样
该成关联也一样(速度)
如果表userroleinfo的表中Userid是唯一的,且表iddbuser_account在account列有索引,则可以改写为:
select b.* from iddbuser_account b, userroleinfo a where a.Userid+0=b.account;
如果Userid是字符型,只要将Userid+0改为trim(Userid)。