1

我有一个 Left Join SQL 查询 (2012),它报告了 00:00:00 秒的执行时间,底部没有 Order By 子句。添加“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

谢谢

4

2 回答 2

2

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

于 2013-03-13T19:36:51.863 回答
1

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

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

你有几个选择,但要研究......

于 2013-03-13T19:35:39.737 回答