在我的SQL-Server 2008 R2中,我有一个SQL查询:
SELECT
IceCrossing.WaterwayName as WaterWayName,
IceCrossing.Segment_ID as Segment_ID,
the_geom = Track.Track
FROM dbo.IceCrossing
LEFT JOIN Track ON IceCrossing.Segment_ID=Track.Segment_ID
我想从IceCrossing中选择所有行,如果在Track中存在具有相同Segment_ID的行,则在结果中显示它。并且JOIN存在问题。想要查询它的查询工作4-5秒,以便将我的260行归还给我。我试图改变它:
SELECT
IceCrossing.WaterwayName as WaterWayName,
IceCrossing.Segment_ID as Segment_ID,
the_geom = Track.Track
FROM dbo.Track
RIGHT JOIN IceCrossing ON Track.Segment_ID=IceCrossing.Segment_ID
但是同一时间 它可以使它更快,而不用数据库和表结构做任何事情?
更新
更多信息。
轨道 - 209行。
IceCrossing - 259行。
Segment_ID类型 - [uniqueidentifier]
如何了解索引?
UPDATE2
我如何理解the_geom
字段中的问题。 Becouse查询:
SELECT
IceCrossing.WaterwayName as WaterWayName,
IceCrossing.Segment_ID as Segment_ID,
FROM dbo.IceCrossing
LEFT JOIN Track ON IceCrossing.Segment_ID=Track.Segment_ID
在一秒钟内工作。
the_geom类型 - 几何形状就像一个很长的字符串
在这种情况下我该怎么办?
答案 0 :(得分:3)
加入很好。您可能需要Track(Segment_ID)
或IceCrossing(Segment_ID)
上的索引。
有了这么多数据,我很惊讶查询可能需要这么长时间。您是否多次运行查询并获得一致的结果?服务器上还有其他什么东西在运行吗?
left outer join
和right outer join
之间的效果没有差异。他们做同样的事情。
答案 1 :(得分:1)
让您尝试过简单select * from Track
,select * from IceCrossing
?如果您的某个列中包含大量数据(例如,varbinary(max)),则查询可能不是很慢,而是在客户端接收所有数据。
尝试该查询
select
I.Segment_ID,
T.Segment_ID
from dbo.IceCrossing as I
left outer join Track as T on T.Segment_ID = I.Segment_ID
它执行了多长时间?