原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秒左右,为什么这么慢?
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秒左右,为什么这么慢?
--试下这样查 是不是快点?
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 '%三槽式冷热冲击试验箱%'
From Table1 A
Inner Join (select cID,cName ,cModel From Table2 B where cName like '%三槽式冷热冲击试验箱%' ) on A.cInstrID = B.cID
快了很多,现在问题变成:什么时候用inner join ,什么是用left join ???
也就是它们判断的原理。什么时候用什么取决于你表的设计,还有表里有多少条数据等。
说用什么好,没有绝对的。
这样应该更快
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
inner join 不能返回Table1 的所有记录(只返回 Table1 与Table2 的交集)
left join 将返回table1 的所有记录以及满足条件的 Table2记录
这样只要找出满足条件的 10 条就不找了,如果不加,就把所有的满足条件的数据都找出来。如果此表数据量大,有上百万的话,就慢了。