İki sütun üzerinde kümelenmiş bir dizin içeren bir tablom var - tablonun birincil anahtarı. aşağıdaki gibi tanımlanmaktadır:Kümelenmiş dizini (PK) SQL 2005'te değiştirmenin en iyi yolu
ALTER TABLE Table ADD CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED
(
[ColA] ASC,
[ColB] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
bu kümelenmiş dizin PK kaldırıp şöyle gibi kümelenmiş bir dizin ekleme ve ayrıca aşağıda gösterilen olmayan bir kümelenmiş dizini kullanarak birincil anahtar kısıtlaması eklemek istiyorum.
CREATE CLUSTERED INDEX [IX_Clustered] ON [Table]
(
[ColC] ASC,
[ColA] ASC,
[ColD] ASC,
[ColE] ASC,
[ColF] ASC,
[ColG] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 90, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
ALTER TABLE Table ADD CONSTRAINT
PK_Table PRIMARY KEY NONCLUSTERED
(
ColA,
ColB
) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Sadece PK, ardından yeni kümelenmiş dizin ekleyin ve sonra kümelenmemiş birincil anahtar indeksi eklemek endeksi kümelenmiş býrakacaktým ama mevcut kümelenmiş dizin bırakarak tablo verilerini neden olacağı öğrenilen Yeniden düşünülmelidir (burada cevabın
What happens when I drop a clustered primary key in SQL 2005 numaralı cevabına bakın). Tablo 1 TB'yi çalıyor, bu yüzden gereksiz yeniden sıralamalardan kaçınmak istiyorum.
Sorum şu: Mevcut yapıdan istenen yapıya gitmenin en iyi yolu nedir?
DÜZENLEME: Sadece açıklığa kavuşturmak istiyorum. Tablo 1TB ve maalesef geçici bir tablo oluşturmak için alanım yok. Temp tablosu oluşturmadan bunu yapmanın bir yolu varsa lütfen bana bildirin.
Bu bir seçenek değil. 1.5TB RAID üzerinde 1TB tablom var. –
SQL Server, yeniden sıralama ve taşıma için alan gerekecek. Boş alanınız yoksa, tablonuzu geçici bir depoda oluşturmak için DROP INDEX'te MOVE TO seçeneğini kullanabilir ve ardından RAID'inizde yeniden oluşturabilirsiniz. – Quassnoi
Satırları, satırları yığın halinde aktarabilir ve bunları gittikçe kaynaktan silebilirsiniz. Bu muhtemelen çok yavaş bir süreç olurdu. –