performance - 临时表变量的性能缓慢
问题描述
我一直假设对于中小型数据集,我会使用临时表变量,一旦数据集变大(相对 - 我知道这有点主观),我会转向 #temp 表。
我有一些代码可以非常快速地返回 159 行 - 0.00 毫秒。我看到 159 行并假设临时表变量会很好。但是,当我插入临时表变量时,代码会旋转 10 分钟。当我切换到#temp 表时,繁荣 - 回到 0.00 秒。
有人能告诉我为什么会发生这种情况,或者我可以做些什么来解决这个问题吗?
环境是SQL Server 2017 Enterprise,内存和磁盘空间充足。
DECLARE @Year INT = 2017
DECLARE @Month INT = NULL
DECLARE @TempTableVariable TABLE
(
Test BIGINT
)
DROP TABLE IF EXISTS tempdb.dbo.#TempTableTest
CREATE TABLE #TempTableTest (Test BIGINT)
--INSERT INTO @TempTableVariable
INSERT INTO #TempTableTest
SELECT
idfHumanCase
FROM dbo.tlbHumanCase
WHERE YEAR(COALESCE(datOnSetDate, datFinalDiagnosisDate, datTentativeDiagnosisDate, datEnteredDate)) = @Year
AND (MONTH(COALESCE(datOnSetDate, datFinalDiagnosisDate, datTentativeDiagnosisDate, datEnteredDate)) = @Month OR @Month IS NULL)
AND LegacyCaseID IN
(
SELECT LegacyCaseID
FROM dbo.tlbHumanCase
WHERE YEAR(COALESCE(datOnSetDate, datFinalDiagnosisDate, datTentativeDiagnosisDate, datEnteredDate)) = @Year
AND (MONTH(COALESCE(datOnSetDate, datFinalDiagnosisDate, datTentativeDiagnosisDate, datEnteredDate)) = @Month OR @Month IS NULL)
GROUP BY LegacyCaseID HAVING COUNT(*) > 1
)
SELECT * FROM #TempTableTest
--SELECT * FROM @TempTableVariable
解决方案
推荐阅读
- angular - Angular从完整路径获取不带扩展名的文件名
- java - 使用java 8根据该对象的可为空的ArrayList属性对对象列表进行排序
- asp.net - 负载均衡器后面的 Identity Server 4 给出未经授权的异常
- sqlite - Sqlite 从 3 个连接表中删除所有连接的行
- c - 是否有任何方法可以在 VScode 上停止此消息(突然停止)
- javascript - 将当前日期添加到 pdf(在浏览器中打开时)
- android - 如何为垂直搜索栏应用垂直进度可绘制
- javascript - cypress 中命令断言失败时如何在重试逻辑中添加延迟
- r - 根据时间步长对数据进行排序?
- c++ - CMake连接到数组中的每个字符串