【问题标题】:Copy table without data复制没有数据的表
【发布时间】:2013-05-23 19:18:52
【问题描述】:

我正在创建一个临时表,该表部分基于另一个(非临时)表的结构。我只需要结构,而不是数据。在我的研究中,我发现 2 个 SELECT 语句可以满足我的需要:

SELECT ID, Field1 FROM Table1 (NOLOCK) WHERE 0=1

SELECT TOP (0) ID, Field1 FROM Table1 (NOLOCK)

性能差异可能可以忽略不计,但我想知道哪个 SELECT 更高效?

谢谢

编辑 1:我在 Windows NT 6.1 上使用 Microsoft SQL Server 2005 - 9.00.5057.00 (X64) 64 位(Build 7601:Service Pack 1)

编辑 2:两个语句的执行计划看起来完全一样,所以我猜测性能上是否存在差异,可以忽略不计。

【问题讨论】:

  • 你看过执行计划了吗?如果您对性能感到好奇,那通常是最好的起点。
  • 这是使用 MS SQL Server 吗?如果有,是什么版本?如果不是,那是什么 RDBMS?
  • @Abe Miessler 我应该在执行计划中查看哪些方面?我不是 SQL 专家(我是在编程时自学的)
  • @Ryan Gates: Microsoft SQL Server 2005 - 9.00.5057.00 (X64) Mar 25 2011 13:33:31 版权所有 (c) 1988-2005 Microsoft Corporation Standard Edition (64-bit) o​​n Windows NT 6.1(内部版本 7601:Service Pack 1)
  • 请始终使用其他信息更新问题,而不是在评论中回复。此外,对于这个问题,MS SQL Server 2005 和 64 位就足够了。

标签: sql sql-server-2005 select query-performance


【解决方案1】:

两个查询都使用0 ms 进行持续扫描,因此您应该选择您和您的团队确定的更清晰和可读的任何一个。在某些情况下,性能并不是最重要的因素,但应该始终考虑可维护性。您应该使用它来指导您的决定。

根据我的个人喜好,我会选择:

SELECT TOP (0) ID, Field1 FROM Table1 (NOLOCK)

可以在here 中找到证明这一点的sqlfiddle

【讨论】:

  • 我们的数据库有数百万条记录,所以对我们来说,第一要务是性能。由于这种情况下的性能不是问题,我同意你对TOP (0) 的看法——我更喜欢它而不是0=1 方法。
猜你喜欢
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2021-07-07
  • 2018-11-14
  • 1970-01-01
相关资源
最近更新 更多