1,一个exists和inner的语句,那个效率高呢,大家给指点一下,大家一般用的是那个啊?--1, EXISTS sql sentence
SELECT Routing.Departure_GUID, Routing.FeederGateway_GUID
FROM Routing
WHERE EXISTS(select 1 from #DesMRoutingIDTable AddOnRouting where Routing.RoutingID = AddOnRouting.MID)
AND EXISTS(select 1 from #airpotIDTable where #airpotIDTable.aID=Routing.Departure_GUID OR #airpotIDTable.aID=Routing.FeederGateway_GUID)--1, INNER join sql sentence
SELECT Routing.Departure_GUID, Routing.FeederGateway_GUID
FROM Routing
INNER JOIN
#DesMRoutingIDTable AddOnRouting ON Routing.RoutingID = AddOnRouting.MID
INNER JOIN #airpotIDTable ON #airpotIDTable.aID=Departure_GUID OR #airpotIDTable.aID=FeederGateway_GUID2,还有如果我要去exists表中的数据,如何写,我想取#DesMRoutingIDTable 的ID1和#airpotIDTable的 ID2字段SELECT Routing.Departure_GUID, Routing.FeederGateway_GUID,取(ID1,ID2)
FROM Routing
WHERE EXISTS(select 1 from #DesMRoutingIDTable AddOnRouting where Routing.RoutingID = AddOnRouting.MID)
AND EXISTS(select 1 from #airpotIDTable where #airpotIDTable.aID=Routing.Departure_GUID OR #airpotIDTable.aID=Routing.FeederGateway_GUID)
谢谢大家!
所以是inner join
a 啊,刚刚一个人跟我说exists效率高些,我不知道了,大家继续讨论一下啊
1,sql在inner join的时候如果join 2张表(表1和表2)这样要做2次的扫描表,就是先扫描
表1(join)然后再扫描表2,这样就多了一层的循环
2,如果exists是不是就是一层循环啊,因为都是在exists条件下,同时去表1和表2做比对数据,如果有就返回1啊。个人乱想的,不知道是否理解有误差,说的不对,大家指正
1,sql在inner join的时候如果join 2张表(表1和表2)这样要做2次的扫描表,就是先扫描
表1(join)然后再扫描表2,这样就多了一层的循环 for(int)
{
跟表表1比对
}
for(int)
{
跟表表2比对
}sql要做2次2,如果exists是不是就是一层循环啊,因为都是在exists条件下,同时去表1和表2做比对数据,如果有就返回1啊。 for(int)
{
跟表表1比对;
跟表表2比对就是在一个循环的条件下,这样效率不是高吗?
}
个人乱想的,不知道是否理解有误差,说的不对,大家指正
inner join效率比较稳定。select * from ta a where exists(select 1 from tb where a.id=b.id)
每扫ta一行,都扫tb,遇到匹配即返回ture,对tb的扫描在ta当前行不再继续下去,如果一直没找到,就会扫完tb (索引,或表扫)即是说,匹配度很低,效率就很差。举个极端, tb中每行的id都与ta中每行id相同
即 ta
id
1
1
1
1
1
,,,
tb
id
1
1
1
1
1
1
一扫就有返回,效率极高反之
ta
id
1
1
1
1
1
1
1
...
tb
id
0
0
0
0
0
0
..
每扫ta一行,都要扫完tb,效率极差。
内连接效率则稳定。 在不很清楚实际数据分布情况下,最好用内连接。
谢谢,这个市真正的答案阿
FROM Routing
WHERE EXISTS(select 1 from #DesMRoutingIDTable AddOnRouting where Routing.RoutingID = AddOnRouting.MID)
AND EXISTS(select 1 from #airpotIDTable where #airpotIDTable.aID=Routing.Departure_GUID OR #airpotIDTable.aID=Routing.FeederGateway_GUID)谢谢
--语句
set statistics io off
set statistics io on
--语句
set statistics io off 这个是什么意思?