JOINS工作很慢

时间:2013-07-28 16:26:01

标签: sql sql-server join

在我的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类型 - 几何形状就像一个很长的字符串 在这种情况下我该怎么办?

2 个答案:

答案 0 :(得分:3)

加入很好。您可能需要Track(Segment_ID)IceCrossing(Segment_ID)上的索引。

有了这么多数据,我很惊讶查询可能需要这么长时间。您是否多次运行查询并获得一致的结果?服务器上还有其他什么东西在运行吗?

left outer joinright outer join之间的效果没有差异。他们做同样的事情。

答案 1 :(得分:1)

让您尝试过简单select * from Trackselect * 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

它执行了多长时间?