4

在我的存储过程中,我使用语法将数据插入到本地临时表(即#LocalTable) 。SELECT INTO我目前没有CREATE TABLE为此表编写命令。

是否首选我明确编写CREATE TABLE命令并定义列模式?SELECT INTO在不定义模式的情况下使用方便的表是否有缺点?

4

2 回答 2

5

SELECT INTO 的一些缺点:

  1. 您可能会对数据类型/长度/精度/比例感到惊讶。

  2. 您可以保留源表中的 IDENTITY 属性,但并非总是如此(取决于源查询是否引用了多个表)。

  3. 如果没有显式创建,对于代码的其他维护者来说,select into 的存在可能更难发现,并且它还迫使他们对代码进行逆向工程以试图找出临时表的模式。

一些优点:

  1. 你会变得懒惰一次。

  2. 可能在某些情况下它的性能稍好一些,但如果您稍后要添加索引等,差异将可以忽略不计(并且不能证明我在这一点上所说的一切)。

于 2013-07-25T03:35:48.857 回答
0

我认为没有性能差异,但是当我必须为临时表创建索引时,我会使用 CREATE TABLE 和定义列模式。对于大量数据,这种技术可以显着提高速度。

例如:

CREATE TABLE #tmpTable(ID int not null)
CREATE CLUSTERED INDEX Id_CI ON #tmpTable(ID ASC);

INSERT INTO #tmpTable
SELECT [....]

在使用它之前创建表使代码更具可读性但更严格(这是我的观点)。

另一种方法是使用:

WITH tmpTable AS (
         SELECT [...]
    )

    [Command on tmpTable]   
END

我对 SQL 性能分析的了解还不够,无法知道哪种解决方案更快或哪种解决方案使用更少的资源。

希望能帮助到你。

于 2013-07-25T00:18:05.873 回答