原SQL语句:Select top 10 A.*, B.cName as cInstrName, B.cModel
From Table1 A 
Left Join Table2 B on A.cInstrID = B.cID 
where B.cName like '%三槽式冷热冲击试验箱%' 
order by A.iAutoID desc说明:
1、A表有自增主键 iAutoID, 非聚集索引cInstrID 等
2、B表有 非聚集索引cID 等
3、A表总数据行数:35000,B表总数据行数:32000
4、单查B表的 B.cName like '%三槽式冷热冲击试验箱%' 是没有记录的,耗时不到一秒问题:执行上面的SQL语句很慢,平均耗时 9秒左右,为什么这么慢?

解决方案 »

  1.   


    --试下这样查 是不是快点?
    Select top 10 A.*, B.cName as cInstrName, B.cModel
    From Table1 A  
    Left Join Table2 B on A.cInstrID = B.cID  
    where B.cName like '%三槽式冷热冲击试验箱%' 
      

  2.   

    后来发现:B.cName like '%三槽式冷热冲击试验箱%',如果是有记录的,会很快,求高手答疑??
      

  3.   

    Select top 10 A.*, B.cName as cInstrName, B.cModel
    From Table1 A  
    Inner Join (select cID,cName ,cModel From Table2 B where cName like '%三槽式冷热冲击试验箱%' )  on A.cInstrID = B.cID  
      

  4.   


    快了很多,现在问题变成:什么时候用inner join ,什么是用left join ???
      

  5.   

    你要知道 inner join 、left join 、还有where 里的 in、exists 等之单的区别,
    也就是它们判断的原理。什么时候用什么取决于你表的设计,还有表里有多少条数据等。
    说用什么好,没有绝对的。
      

  6.   

    参考:http://topic.csdn.net/t/20030704/15/1990936.html
      

  7.   

    如果你只取 top 10的话
    这样应该更快
    Select top 10 A.*, B.cName as cInstrName, B.cModel
    From Table1 A   
    Inner Join (select top 10 cID,cName ,cModel From Table2 B where cName like '%三槽式冷热冲击试验箱%' ) on A.cInstrID = B.cID
      

  8.   


    inner join  不能返回Table1 的所有记录(只返回 Table1 与Table2 的交集)
    left join 将返回table1 的所有记录以及满足条件的 Table2记录
      

  9.   

    select top 10 cID,cName ,cModel From Table2 B where cName like '%三槽式冷热冲击试验箱%'
    这样只要找出满足条件的 10 条就不找了,如果不加,就把所有的满足条件的数据都找出来。如果此表数据量大,有上百万的话,就慢了。
      

  10.   

    关键是要 Order by A.iAutoID DESC的,加上后,经测试,不加 top 10的话很快,加了top 10很慢,为什么呢??