当前位置: 首页 > 面试题库 >

意外的#temp表性能

宁锐
2023-03-14
问题内容

开放赏金:好吧,老板需要答案,我需要加薪。这似乎不是一个冷缓存问题。

更新:

我没有遵循以下建议。客户统计数据如何得出一组有趣的数字。

#temp@temp

INSERT,DELETE和UPDATE语句的数量0对1

受INSERT,DELETE或UPDATE语句影响的行0 vs 7647

SELECT语句数0 vs 0

SELECT语句返回的行0 vs 0

交易数量0对1

最有趣的是受影响的行数和事务数。提醒您,以下查询将相同的结果集返回到不同样式的表中。

以下查询基本上都在做同样的事情。他们都选择一组结果(大约7000个)并将其填充到temp或var表中。在我看来,应该比临时表 #temp*
更快地创建和填充var表 @temp, 但是执行第一个示例中的var表需要1分15秒才能执行,而第二个示例中的temp表则需要16秒。
*

谁能提供解释?

declare @temp table ( 
id uniqueidentifier, 
brand nvarchar(255), 
field nvarchar(255),
date datetime, 
lang nvarchar(5), 
dtype varchar(50)
)
insert into @temp (id, brand, field, date, lang, dtype )
select id, brand, field, date, lang, dtype
from view 
where brand = 'myBrand' 
-- takes 1:15

select id, brand, field, date, lang, dtype
into #temp
from view 
where brand = 'myBrand'

DROP TABLE #temp
-- takes 16 seconds

问题答案:

我相信这几乎完全取决于表变量与临时表的性能。

对表变量进行了优化,使其仅具有一行。当查询优化器选择一个执行计划时,它会基于表变量仅具有一行的假设(通常为假)来执行该计划。

我找不到一个很好的来源,但是至少在这里提到了它:

http://technet.microsoft.com/zh-
cn/magazine/2007.11.sqlquery.aspx

其他相关资料:

http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=125052

http://databases.aspfaq.com/database/should-i-use-a-temp-table-or-a-table-
variable.html



 类似资料:
  • 我想知道为什么我用这两对递归的明显例子得到了意想不到的表现。 相同的递归函数在结构中更快(rec2 VS rec1),相同的递归模板函数在虚拟参数中更快(rec4 VS rec3)! 使用更多参数的C++函数是否更快?! 下面是尝试的代码: 我得到这样的输出: 我已启用:Windows 8.1/i7 3630QM/Latch Qt ChainTool/C++14

  • 问题内容: 我有一个复杂的查询,需要在后续查询中使用(实际上是update语句)。我已经尝试过使用CTE和临时表。与临时表方法相比,使用CTE的性能令人恐惧。大概是15秒vs毫秒。为了简化测试,而不是在后续查询中加入CTE / Temp表,我仅从中选择*。在这种情况下,它们执行相同的操作。 我已经在后续查询中查看了这两种方法的执行计划,然后只需选择*。使用简单选择时,查询计划大致相同,但是使用后续

  • 本文向大家介绍windows 服务器注意windows的temp临时目录(temp文件过大问题),包括了windows 服务器注意windows的temp临时目录(temp文件过大问题)的使用技巧和注意事项,需要的朋友参考一下 windows解压缩包、安装软件时,会生成一些临时文件存放在temp目录中,windows不会自动删除这些文件。 临时文件目录可以在环境变量中查看和配置 在工作机or个人P

  • 如本文所述,缩进有一个ESLint属性,名为。示例如下所示: 或对于选项卡式缩进: 但是,如果我将这个确切的代码粘贴到我的文件中,VS Code将显示为错误: ESLint:. eslintrc中的ESLint配置无效:-意外的顶级属性"indent"...有关详细信息,请参阅ESLint输出通道。 我以前拥有的文件已经有很多规则,并且没有打印出错误。如果我将添加到该列表中,或者单独添加,它将失败

  • 问题内容: 我想撤消一个列表,但是我设法做到了,但是在工作的中间我发现了一些奇怪的事情。下面的程序按预期工作,但list_reversed [i] = list [len(list)-1-i] 和 print(list [i]) (顺理成章地注释了 最后一行 )这 行 引起了 list 的更改。我没看到什么?我的Python版本是3.3.3。先感谢您。 问题答案: 以下: 使两个变量引用相同的列表

  • 简介 一般工作中会有我想把某个文件分享给别人,但是又不想直接发给对方,因此需要一个中转站,我把文件上传到这个中转站,然后中转站给我一个可以查看的url,我再把url发给要查看的人。 或者是想把一个文件分享给别人但是由于操作系统不同或者使用的文件编辑器不同而导致展示上有一些差异。 那么这个项目的目的就是为了解决这种需求。目前工作中我会把临时的接口文档写好,然后生成一个url分享给前端或者客户端,并且