回答

收藏

意外的#temp表性能

技术问答 技术问答 183 人阅读 | 0 人回复 | 2023-09-14

开放奖金:好吧,老板需要答案,我需要加薪。这似乎不是一个缓存问题。
8 E( R& {& i2 c. k, z7 R) h更新:
' g: ]! L- ]3 k3 l  ^$ c% D- v我没有遵循以下建议。客户统计数据如何获得一组有趣的数字。. V+ Z! p& T8 o6 _+ L) n6 w
#temp    与 @temp) M. H2 G3 Q* ]7 u5 i
INSERT,DELETE和UPDATE语句数0对19 J; L  |5 x$ M: Q0 f
受INSERT,DELETE或UPDATE句子影响行0 vs 7647" U; N; L: q0 m; v; _
SELECT语句数0 vs 06 P$ e( N, I% z5 S' i7 b1 t0 s/ A
SELECT语句返回行0 vs 0
! Z; x% d; W' [+ e9 s交易数量0对1
: o2 z) _+ t; {最有趣的是受影响的行数和事务数。提醒您,以下查询将相同的结果集返回不同风格的表格。
! Q( D" D( h4 G. ?; q) J  v以下查询基本上都在做同样的事情。他们都选择了一组结果(约7000个)并填写它们temp或var表中。在我看来,应该比临时表更 #temp*$ T% K  O- U" @, B7 M* C
更快地创建和填充var表 @temp,    但在执行第一个示例中var第二个例子需要1分15秒才能执行表格temp表格需要16秒。
*
8 D: K% n! f5 [1 W. z! h谁能提供解释?% A$ o( ]3 u5 F& M9 s. {9 }7 K# C
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,dtypefrom view where brand = 'myBrand' -- takes 1:15与9 u  @6 g% E1 i* f6 I
select id,brand,field,date,lang,dtypeinto #tempfrom view where brand = 'myBrand'DROP TABLE #temp-- takes 16 seconds                9 W* M5 X0 ~8 ?$ m( H2 |- r
    解决方案:                                                                  `8 n' p. s9 Z% w9 s* t
                                                                我相信这几乎完全取决于表变量和临时表的性能。
+ p( R2 a& m  _7 T优化表变量,使其只有一行。当查询优化器选择执行计划时,它将基于表变量只有一行假设(通常是假的)。
; J9 K3 ]8 ~0 P8 l1 w8 i我找不到好的来源,但至少这里提到了:
8 @$ B' k" z0 Hhttp://technet.microsoft.com/zh-: c6 T( {8 V$ F" W' h* l' ^; ]: H- x
cn/magazine/2007.11.sqlquery.aspx. ?  M8 K, E4 D: s! ~8 }7 D" D# x, {
其他相关资料:: A+ E5 n! U7 G8 `
http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=1250527 f6 f+ i0 W3 O2 y# O$ V
http://databases.aspfaq.com/database/should-i-use-a-temp-table-or-a-table-
, [8 y" E# f4 y0 Vvariable.html
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则