我有一个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
由于
答案 0 :(得分:2)
ORDER BY
订购有关您的列/行的结果。
尝试在您订购的所有列上设置索引并重试,这应该会有所帮助。
答案 1 :(得分:1)
这很正常。使用SQL和ORDER BY算法,您可以获得许多记录的性能损失,这些记录都取决于处理器和其他环境因素。您可以做的是将两个表设置为视图。如果性能提高,请查看是否将数据编译到预定义视图中。
此外,您可以使用数据转换并以编程方式将数据合并到脚本中自己的表中,具体取决于您想要提取数据的频率,实时需要等等。
你有几个选择来研究......