2 个临时表初始化是否存在性能差异?

Gue*_*est 2 sql-server

我最近在我工作的地方遇到了一个有趣的实践。我注意到一些开发人员使用以下方式来初始化 sql server 临时表:

if object_id('tempdb..#TempTbl','u') is not null
drop table #TempTbl
Run Code Online (Sandbox Code Playgroud)

其他队友将使用:

if object_id('tempdb..#TempTbl') is not null
drop table #TempTbl
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 2 次初始化之间是否存在性能差异?
  2. 第一个语句中的 ,'u' 段代码有什么作用?

我已经尝试研究 msdn 以获取更多信息,但似乎这两种说法都没有真正的区别。它们产生相同的结果,但我对性能或其他相关因素很好奇。

Kin*_*hah 7

2 次初始化之间是否存在性能差异?

不。没有性能差异。如果您使用set statistics time, io ON并检查没有涉及 CPU 或 IO

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
Run Code Online (Sandbox Code Playgroud)

第一个语句中的 ,'u' 段代码有什么作用?

语法object_id

OBJECT_ID ('[database_name.[schema_name].|schema_name.]
object_name'[,' object_type '])

所述u指定其用户对象。它被称为用户定义表sys.objects

我认为定义你在做什么是很好的编码习惯。所以在第一个例子中,开发人员说if #TempTbl table exists then drop it。我见过糟糕的命名,人们将视图命名为表,不要使用模式前缀和其他坏习惯

在 SQL Server 2016 中,您将看到一个新的语法 ..

DROP TABLE IF EXISTS 
Run Code Online (Sandbox Code Playgroud)