Подтвердить что ты не робот

Можно ли создавать индексы на временной таблице при использовании SELECT INTO?

Я загружаю данные из CSV файла в временную промежуточную таблицу, и эта временная таблица запрашивается много. Я просмотрел свой план выполнения и увидел, что много времени тратится на сканирование таблицы temp.

Есть ли способ создать индекс в этой таблице, когда я SELECT INTO it?

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

4b9b3361

Ответ 1

Таблица, созданная 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