2013-03-13 81 views
1

我有一个左连接SQL查询(2012)报告00:00:00第二个执行时间没有底部的Order By子句。添加“Order By”使查询花费00:00:24秒!SQL Server左加入订单BY

这是正常的吗?

这很清楚,我在这里错过了一些相当基本的概念,但我会假定查询被执行,然后结果排序。显然情况并非如此,请任何人都能指出我的方向?

有点其他信息:我加入的两张表分别有大约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 

感谢

+1

你能发布SQL吗? – 2013-03-13 19:33:56

+1

“这是正常的吗?”这真的取决于。你的'ORDER BY'子句是什么?涉及的数据类型是什么?是否有索引支持您的查询?很明显,它与数据量无关,而与您所需排序引入的排序操作无关。没有更多细节,我们无法对此发表评论! – 2013-03-13 19:34:19

+0

嗨,大家好,我已经添加了SQL,谢谢 – pugu 2013-03-13 20:17:13

回答

1

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

您也可以使用数据编程的变换和组合数据到它自己的表上的脚本,取决于你想要多久提取数据,如果你需要它的实时等

你有几个选项虽然研究...

+0

我一直试图嵌套SQL的部分,现在没有帮助,但现在就尝试一个视图。 – pugu 2013-03-13 20:36:05

+0

pugu,让我知道如果性能提高。我也有点好奇。 – ApolloSoftware 2013-03-13 20:38:26

+1

我想我可以修复它,谢谢你。在创建视图时,我添加了一个列并使用字符串表达式的结果对其进行了更新,以代替匹配:REPLACE(SUBSTRING(dbo.subtitles.sub_filename,1,LEN(dbo.subtitles.sub_filename)-4), ' - ','')我在dbo.subtitles_at_rbm.truncated_filename上匹配,我已经把前一个查询的结果放入了。照明现在很快,所以也许即使我在日期栏上订购那些字符串操作一遍又一遍地发生,而它做到了......? – pugu 2013-03-13 21:12:22

2

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