语句如下:select * from opinion where resource_id in (select resource_id from da_info where left(da_id,4) = '2007')
解释:我需要查出DA_INFO表中da_id左边4位数是2007的数据中resource_id 字段的值与opinion 表的resource_id 字段值一样的opinion表数据20万行的数据用查询分析器查询时间需要19秒,感觉时间长了,请DX帮忙看看是否是SQL语法书写的问题,有没有其他方法可以提高这句SQL语句的执行效率??

解决方案 »

  1.   

    select * from opinion a where
    exists(select 1 from da_info where resource_id= a.resource_id and da_id like '2007%')
    resource_id\da_id 都需要建索引
      

  2.   


    SELECT * FROM OPINION OP
    LEFT JOIN ( SELECT RESOURCE_ID FROM DA_INFO WHERE LEFT(DA_ID,4) ='2007' ) DA ON DA.RESOURCE_ID = OP.RESOURCE_ID
      

  3.   

    原则上in可以用连接代替,
    --随手敲的不排除有误
    select tb.* from
        (select resource_id from da_info where left(da_id,4) = '2007') as ta
    left join 
        (select * from opinion) as tb
    on  ta.resource_id=tb.resource_id
      

  4.   

    多谢各位DX!刚才试了一下以上几种写法select * from opinion a where
    exists(select 1 from da_info where resource_id= a.resource_id and da_id like '2007%')只有
    这种写法跟我原来的方法查出来的数据是一样的,其他数据条数都相差多啊?