2012-12-21 37 views
12

Tôi đang tải dữ liệu từ tệp CSV vào bảng dàn xếp tạm thời và bảng tạm thời này đang được truy vấn rất nhiều. Tôi nhìn vào kế hoạch thực hiện của tôi và thấy rằng rất nhiều thời gian được dành để quét bảng tạm thời.Có thể tạo các chỉ mục trên bảng tạm thời khi sử dụng SELECT INTO không?

Có cách nào để tạo chỉ mục trên bảng này khi tôi SELECT INTO không?

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 bạn không thể tạo một bảng và sử dụng chọn để chèn vào nó. – HLGEM

+0

@HamletHakobyan Đó là một bảng heap - vì vậy tôi sẽ cần phải thêm một cột cho PK sau đó? –

+2

Bạn đã thử chạy câu lệnh tạo chỉ mục làm câu lệnh tiếp theo trong chuỗi chưa? – HLGEM

Trả lời

17

Các bảng được tạo bởi SELECT INTO luôn là một đống. Nếu bạn muốn có một PK/Identity cột bạn có thể làm như bạn đề nghị trong các ý kiến ​​

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

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

Hoặc tránh rõ ràng CREATE và cần phải liệt kê tất cả các cột ra với

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