2010-02-22 15 views
5

Bir tablodaki diğer tuşlarla yabancı anahtarlar tarafından başvurulan bir tablo Document var. Bir Belge kaydını silmeye çalışıyorum ve yürütme planıma göre SQL Server, başvuru tablolarının her birinde kümelenmiş bir dizin taraması yapıyor. Bu çok acı verici.Çok sayıda yabancı anahtar tarafından başvurulan bir tablo için silme işlemini en iyi duruma getirme

FK'nin FK alanlarında otomatik olarak bir dizin oluşturduğunu düşünmüştüm? Yoksa yanılıyor muyum? Her bir FK alanına açık bir indeks koyup veri tabanımı dolaşmam gerekiyor mu?

cevap

4

Hayır, bir yabancı anahtar oluşturduğunuzda SQL Server otomatik olarak bir dizin oluşturmaz. İndeksleri kendiniz oluşturmalısınız.

Alakalı yayın: genellikle otomatik olarak dizine eklenir "birincil anahtar", ile ilişkilidir, çünkü Does a foreign key automatically create an index?

+0

Teşekkürler, bu soruya cevap veriyor! Benimki muhtemelen bir çift ... –

1

adı "Yabancı anahtar" biraz yanıltıcı. Yani, insanlar yabancı anahtarın da endekslendiğini varsayabilirler.

Anlaşma, burada "anahtar" ın bir kısıtlama olduğunu ifade eder. Yabancı bir anahtar eklemekle aslında bir kısıtlama eklersiniz. Endeks tamamen farklı bir anlaşma.

+1

Aslında, hala farklı. "Anahtar" sadece onu bir tanımlayıcı olarak kullanabileceğiniz anlamına gelir. Bir indeks, bir anahtarı * uygulamak için rahatça kullanılabilecek bir erişim yapısıdır. 'Yabancı anahtar' terimi, 'bu bir anahtar değil, bu tablonun anahtarı değil, başka bir' yabancı 'tablonun anahtarıdır. Ve tipik olarak, insanlar 'yabancı anahtar' dediğinde, aslında yabancı anahtarın referans bütünlüğünü zorlayan bir kısıtlama olarak 'yabancı anahtar kısıtlaması' anlamına gelir. –

İlgili konular