SQL Server左连接与Order BY

时间:2013-03-13 19:31:23

标签: sql-server join sql-order-by

我有一个Left Join SQL查询(2012),它在底部报告没有Order By子句的00:00:00秒执行时间。添加“Order By”使查询需要00:00:24秒!

这是正常的吗?

很明显,我在这里缺少一些相当基本的概念,但我会假设执行查询然后排序结果。显然事实并非如此,请有人指出我正确的方向吗?

其他一些信息:我加入的两个表分别有大约35,000行和22,000行。我正在选择一个日期范围,左边的连接发生在两个字符串上。结果集在300到400个结果之间。我知道比较字符串有一个巨大的惩罚,我猜这是问题的一部分。

这是SQL:

DECLARE @mystartdate as datetime
SET @mystartdate = CAST(CAST((GETDATE() - 0) AS date) as nvarchar) + ' 06:00:00'

DECLARE @myenddate as datetime
SET @myenddate = CAST(CAST((GETDATE() + 1) AS date) as nvarchar) + ' 05:59:59'

SELECT SUBSTRING(CAST([Event_Time] AS nvarchar),0,9) AS mytime
,[CombinedDateTime]
,[MediaFileName]
,[Duration]
,[High_Definition]

FROM [dbo.schedules]

LEFT JOIN dbo.subtitles
ON REPLACE(SUBSTRING(dbo.subtitles.sub_filename, 1, LEN(dbo.subtitles.sub_filename) -4), '-', '') = REPLACE(dbo.schedules.MediaFileName,'/','')

WHERE [CombinedDateTime] >= @mystartdate AND [CombinedDateTime] <= @myenddate

Order by CombinedDateTime

由于

2 个答案:

答案 0 :(得分:2)

ORDER BY订购有关您的列/行的结果。 尝试在您订购的所有列上设置索引并重试,这应该会有所帮助。

答案 1 :(得分:1)

这很正常。使用SQL和ORDER BY算法,您可以获得许多记录的性能损失,这些记录都取决于处理器和其他环境因素。您可以做的是将两个表设置为视图。如果性能提高,请查看是否将数据编译到预定义视图中。

此外,您可以使用数据转换并以编程方式将数据合并到脚本中自己的表中,具体取决于您想要提取数据的频率,实时需要等等。

你有几个选择来研究......