2012-12-21 5 views
12

Ich bin Laden von Daten aus einer CSV-Datei in eine temporäre Staging-Tabelle und diese temporäre Tabelle viel abgefragt wird. Ich schaute auf meinen Ausführungsplan und sah, dass viel Zeit damit verbracht wurde, den Temp-Tisch zu scannen.Ist es möglich, Indizes für eine temporäre Tabelle zu erstellen, wenn SELECT INTO verwenden?

Gibt es eine Möglichkeit Index für diese Tabelle zu erstellen, wenn ich es 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

+0

@HamletHakobyan Sie kein erstellen Tabelle und verwenden Sie auswählen, um in es einzufügen. – HLGEM

+0

@HamletHakobyan Es ist ein Heap-Tabelle - so muss ich würde dann eine Spalte für PK hinzufügen? –

+2

Haben Sie versucht, eine create index-Anweisung als nächste Anweisung im Stapel auszuführen? – HLGEM

Antwort

17

Die von SELECT INTO erstellte Tabelle ist immer ein Haufen. Wenn Sie eine PK/Spalte Identität möchten, können Sie entweder tun, wie Sie in den Kommentaren vorschlagen

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

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

Oder die explizite CREATE vermeiden und alle Spalten Liste müssen aus mit

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 
Verwandte Themen