Alt düzey SQL bilgim (Server 2008) sınırlıdır ve şimdi DBA'larımız tarafından sorgulanmaktadır. Senaryoyu açıklamama izin verin (haklı olduğumu umarak bariz ifadelerden bahsetmiştim, ancak yanlış bir şey görürseniz lütfen söyleyin) senaryoyu:
İnsanlar için 'Mahkeme Kararları' tutan bir masamız var. Tabloyu oluşturduğumda (Ad: CourtOrder), şu şekilde oluşturdum:
CREATE TABLE dbo.CourtOrder
(
CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
PersonId INT NOT NULL,
+ around 20 other fields of different types.
)
Daha sonra birincil anahtara kümelenmemiş bir dizin uyguladım (verimlilik için). Nedenlerim, bunun benzersiz bir alan (birincil anahtar) olması ve sık sık yaptığımız gibi, esas olarak seçim amacıyla dizine eklenmesiSelect from table where primary key = ...
Daha sonra Kişi Kimliğine KÜMELENMİŞ bir dizin uyguladım. Bunun nedeni, belirli bir kişi için siparişleri fiziksel olarak gruplamaktı, çünkü işin büyük çoğunluğu bir kişi için sipariş alıyor. Yani,select from mytable where personId = ...
Şimdi bunun üzerine çekildim. Kümelenmiş dizini birincil anahtara ve normal dizini kişi kimliğine koymamız gerektiği söylendi. Bu bana çok garip geliyor. Öncelikle, neden benzersiz bir sütuna kümelenmiş bir dizin koyarsınız? ne kümeleniyor? Kuşkusuz bu kümelenmiş dizinin israfı mı? Benzersiz bir sütunda normal bir indeksin kullanılacağına inanırdım. Ayrıca, dizini kümelemek farklı bir sütunu kümeleyemeyeceğimiz anlamına gelir (Tablo başına bir tane, değil mi?).
Bir hata yaptığımın söylenmesinin nedeni, Kişi Kimliği'ne kümelenmiş bir dizin koymanın ekleri yavaşlatacağına inanmalarıdır. Bir seçimin hızındaki% 5'lik artış için, ekleme ve güncellemelerde hızda% 95'lik bir düşüş elde ediyor oluruz. Bu doğru ve geçerli mi?
Kişi kimliğini kümelediğimiz için SQL Server'ın, Kişi Kimliğine bir değişiklik yaptığımızda veya eklediğimizde verileri yeniden düzenlemesi gerektiğini söylüyorlar.
Öyleyse sordum, SQL neden bu kadar yavaşsa KÜMELİ DİZİN konseptine sahip olsun? Söyledikleri kadar yavaş mı? Optimum performansı elde etmek için indekslerimi nasıl kurmalıyım? SELECT'in INSERT'ten daha fazla kullanıldığını düşünmüştüm ... ama INSERTS'de kilitleme sorunları yaşadığımızı söylüyorlar ...
Umarım birisi bana yardım edebilir.