SORU
30 EYLÜL 2011, Cuma


Kümelenmiş vs Kümelenmiş Olmayan

SQL alt seviye bilgim (Server 2008) sınırlıdır, ve şimdi bizim DBA tarafından challanged ediliyor. Bana haklı olduğumu, ama eğer yanlış bir şey görürseniz umuduyla açık ifadeler söz var, lütfen söyleyin) senaryo anlatayım:

Tutar 'Mahkeme kararları' insanlar için. bir tablo var Tablo oluşturdum, (Adı: CourtOrder), hoşuma yarattı

CREATE TABLE dbo.CourtOrder
(
  CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
  PersonId INT NOT NULL,
    around 20 other fields of different types.
)

Ben o zaman birincil anahtar (verimli) olmayan kümelenmiş bir dizin uygulanır. Benim sebep benzersiz bir alan (birincil anahtar), ve biz genellikle 2 ** olarak, ağırlıklı olarak seçim amaçlı endeksli olmalıdır

Ben o zaman Personİd KÜMELENMİŞ bir dizin uygulanır. Neden çalışmak büyük çoğunluğu bir kişi için emir alma gibi belirli bir kişi için toplu siparişler için fiziksel olarak. Yani, select from mytable where personId = ...

Şimdi bunun üzerinde durdu olmuştur. Birincil anahtar kümelenmiş dizin koymalıyız söylendi, ve personİd normal dizin. Bu bana çok tuhaf geldi. Öncelikle, neden benzersiz bir sütun kümelenmiş bir dizin koyar mısınız? bu kümeleme nedir? Şüphesiz bu, kümelenmiş dizin kaybı olur? Normal bir dizin benzersiz bir sütun üzerinde kullanılacak bir şey beklemezdim. Ayrıca, dizin kümeleme farklı bir sütun (her masa için Bir, değil mi?) küme edemeyiz anlamına gelir.

Benim için muhakeme bir hata yaptım söylenmeden bu Personİd kümelenmiş bir dizin ekler koyarak yavaş olun ki onlar olduğuna inanıyoruz. Bir seçin hızı %5 kazanç için, ekler ve güncellemeler hız 95'lik bir düşüş oluyor. Bu doğru ve geçerli mi?

Biz personİd küme için SQL Server daha eklemek, verileri yeniden düzenlemek veya Personİd değişiklik olduğunu söylüyorlar.

Sonra dedim, neden SQL eğer çok yavaş ise KÜMELENMİŞ bir DİZİN kavramı var ki? Söyledikleri kadar yavaş? Nasıl Kur var benim endeksleri en iyi performansı elde etmek için gerekir? SEÇİN daha EKLE daha kullanılır sanırdım... ama EKLER kilitleme sorunlarımız var diyorlar.

Birisi bana yardımcı olabilir umuyoruz.

CEVAP
30 EYLÜL 2011, Cuma


Vs olmayan kümelenmiş bir kümelenmiş dizin arasında ayrım kümelenmiş dizinbelirler veritabanında satırların fiziksel sırası. Diğer bir deyişle, uygulama kümelenmiş dizin için PersonId anlamına gelen satırlar olacak fiziksel olarak sıralanmış tarafından PersonId Tablo, izin dizin arama için bu doğrudan satır (yerine olmayan bir kümelenmiş dizin, hangisi doğrudan satır konumu, ekleyerek fazladan bir adım).

İşte bu " dedisıradışıkümelenmiş dizin için birincil anahtar için, ama duyulmadık bir şey değil. Senaryo aslında varsayıyorsun ne tersidir konu: seni istiyorumbenzersizkümelenmiş bir dizin değerleri, çoğaltır. Çünkü clustered ındex belirlediği fiziksel düzen sıra, eğer dizin benzersiz olmayan bir sütun, daha sonra sunucu var eklemek bir arka plan değeri için satır olan bir yinelenen anahtar değeri (senin örneğinde, herhangi bir satır ile aynı PersonId) böylece toplam değeri (anahtar arka plan değeri) benzersiz.

I-cekti önermek tek şeydeğilbirincil anahtar olarak yedek anahtar (7**) bir sütun kullanarak, ama PersonId ve bazı diğer bileşik birincil anahtar benzersiz olarak tanımlayan bir sütun veya sütun kümesi kullanmak yerine. Eğer bu mümkün (ya da pratik değil) olsa bile, o zaman CourtOrderId kümelenmiş dizini koydu.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • Strata1000

    Strata1000

    28 EYLÜL 2009