Mam procedura składowana, która działa z dużą ilością danych. Mam dane wstawione do tabeli tymczasowej. Całkowity przepływ zdarzeń jest cośTworzenie klucza podstawowego na stole tymczasowym - kiedy?
CREATE #TempTable (
Col1 NUMERIC(18,0) NOT NULL, --This will not be an identity column.
,Col2 INT NOT NULL,
,Col3 BIGINT,
,Col4 VARCHAR(25) NOT NULL,
--Etc...
--
--Create primary key here?
)
INSERT INTO #TempTable
SELECT ...
FROM MyTable
WHERE ...
INSERT INTO #TempTable
SELECT ...
FROM MyTable2
WHERE ...
--
-- ...or create primary key here?
Moje pytanie brzmi, kiedy jest najlepszy czas, aby utworzyć klucz podstawowy na moim #TempTable stole? Teoria, że powinienem utworzyć ograniczenie/indeks klucza podstawowego po tym, jak wstawię wszystkie dane, ponieważ indeks musi zostać zreorganizowany podczas tworzenia informacji klucza podstawowego. Ale zdałem sobie sprawę, że moje podsumowanie może być błędne ...
W przypadku, gdy jest to istotne, typy danych, których użyłem są prawdziwe. W tabeli , Col1
i Col4
będą stanowić mój klucz podstawowy.
Aktualizacja: W moim przypadku duplikuję klucz podstawowy tabel źródłowych. Wiem, że pola, które będą stanowić mój klucz podstawowy, będą zawsze unikatowe. Nie martwię się o nieudaną tabelę zmian, jeśli dodaję klucz podstawowy na końcu.
Chociaż to na bok, moje pytanie nadal jest takie, które jest szybsze, zakładając, że oba powiodą się?
P.S. Przepraszam, jeśli to duplikat. Jest na tyle podstawowy, że może być, ale nie udało mi się znaleźć czegoś podobnego.
Interesujące. Dziękuję Ci. Pomocny. Czy mógłbyś rozwinąć niektóre przykłady? –
@Cade, dla indeksu klastrowanego masz na myśli fizyczną kolejność na dysku, a nie kolejność logiczną (tabele nie mają kolejności logicznej). –
Nie, porządek fizyczny na dysku może być dowolny. Indeks klastrowany to po prostu dane przechowywane w liściach w indeksie btree zamiast w stercie. Wciąż istnieje możliwość frasowania w SQL Server i na dysku. –