自学成才,小企业DIYer在这里。运行'14。
我现在每个月运行这个查询4次,已经将近两年了。然而,在过去的两个月中,查询运行时变得非常长。什么东西在2-3分钟内运行现在需要24+小时.
我将每周文件导入到一个月表中,然后将该表与前两个月表进行对比,以获得一个唯一的导出文件。表的容量与数据类型、索引和允许的空值保持一致。
这不是计算能力。我可以用去年一月的文件代替这个一月份的文件,查询在几分钟内运行。同样,这是从2016年12月的档案开始的。以前的任何文件都运行得非常快。
有什么想法吗?提前感谢!
查询:
SELECT [2017_JAN].*
FROM [dbo].[2017_JAN]
LEFT JOIN [dbo].[2016_NOV]
ON [2016_NOV].[ID] = [2017_JAN].[ID]
LEFT JOIN [dbo].[2016_DEC]
ON [2016_DEC].[ID] = [2017_JAN].[ID]
WHERE [2016_NOV].[ID] IS NULL
and [2016_DEC].[ID] IS NULL发布于 2017-01-20 23:19:28
如前所述,在所涉及的表上重建索引解决了这个问题。在这种情况下,您可以运行以确保表的健康。
发布于 2019-07-08 15:18:36
如果执行select *,索引将无法工作。如果您只选择所需的实际列,它将避免表扫描并运行得更快。
另一个提示是,如果您有足够的内存,可以在联接中添加一个散列查询提示:https://learn.microsoft.com/en-us/sql/relational-databases/performance/joins?view=sql-server-2017
SELECT [2017_JAN].*
FROM [dbo].[2017_JAN]
LEFT HASH JOIN [dbo].[2016_NOV]
ON [2016_NOV].[ID] = [2017_JAN].[ID]
LEFT HASH JOIN [dbo].[2016_DEC]
ON [2016_DEC].[ID] = [2017_JAN].[ID]
WHERE [2016_NOV].[ID] IS NULL
and [2016_DEC].[ID] IS NULL总之,我们必须查看您的表、键和索引,以优化所有这些。
祝好运!
https://stackoverflow.com/questions/41773608
复制相似问题