使用SELECT INTO时是否可以在临时表上创建索引?

时间:2012-12-21 20:22:53

标签: sql tsql indexing select-into

我正在将CSV文件中的数据加载到临时临时表中,并且正在查询此临时表。我查看了我的执行计划,发现很多时间花在扫描临时表上。

当我SELECT INTO时,有没有办法在这张桌子上创建索引?

SELECT *    
FROM TradeTable.staging.Security s
WHERE (
    s.Identifier IS NOT NULL
    OR s.ConstituentTicker IS NOT NULL
    OR s.CompositeTicker IS NOT NULL
    OR s.CUSIP IS NOT NULL
    OR s.ISIN IS NOT NULL
    OR s.SEDOL IS NOT NULL
    OR s.eSignalTicker IS NOT NULL)

enter image description here

1 个答案:

答案 0 :(得分:21)

SELECT INTO创建的表始终是堆。如果您需要PK / Identity列,您可以按照您在评论中的建议进行操作

CREATE TABLE #T
(
Id INT IDENTITY(1,1) PRIMARY KEY,
/*Other Columns*/
)

INSERT INTO #T 
SELECT *
FROM TradeTable.staging.Security

或者避免使用明确的CREATE,并且需要使用

列出所有列
SELECT TOP (0) IDENTITY(int,1,1) As Id, *
INTO #T
FROM TradeTable.staging.Security

ALTER TABLE #T ADD PRIMARY KEY(Id)

INSERT INTO #T 
SELECT *
FROM TradeTable.staging.Security