日期:2014-05-18  浏览次数:20575 次

关于Left Join极慢的问题!!求高手指点!!!!!
原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秒左右,为什么这么慢?





------解决方案--------------------
SQL code

--试下这样查 是不是快点?
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 '%三槽式冷热冲击试验箱%'

------解决方案--------------------
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
------解决方案--------------------
探讨
什么时候用inner join ,什么是用left join

------解决方案--------------------
如果你只取 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
------解决方案--------------------
探讨
引用:

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


快了很多,现……

------解决方案--------------------
快了吗

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