'Artan bir anahtara dayalı kümelenmiş bir dizin oluşturmaktan kaçının', SQL Server 2000 günlerinden kalan bir efsane midir?


22

Veritabanlarımız, çoğu birincil anahtar olarak bir tam sayı vekil anahtarı kullanan birçok tablodan oluşur. Bu ana anahtarların yaklaşık yarısı kimlik sütunlarındadır.

Veritabanı geliştirme, SQL Server 6.0'ın günlerinde başladı.

Baştan itibaren izlenen kurallardan biri, bu Endeks Optimizasyon İpuçları bölümünde bulduğunuz gibi, artan bir anahtarı temel alan kümelenmiş bir dizin oluşturmaktan kaçınmaktı .

Şimdi SQL Server 2005 ve SQL Server 2008 kullanarak, koşulların değiştiğine dair güçlü izlenim edindim. Bu arada, bu ana anahtar sütunlar tablonun kümelenmiş endeksi için mükemmel bir ilk aday.

Yanıtlar:


34

Efsane, satır düzeyinde kilitleme ekleyen SQL Server 6.5 öncesine kadar gider . Ve burada Kalen Delaney tarafından ima edildi .

Veri sayfası kullanımının "sıcak noktaları" ile ilgiliydi ve 2k sayfasının tamamı (SQL Server 7 ve üstü 8k sayfaları kullanıldı) kilitliydi, bunun yerine eklenen satır yapıldı.

Kimberly L. Tripp'in yetkili makalesi bulundu

"Kümelenmiş Endeksi Tartışması Devam Ediyor ..."

Sıcak noktalar, PRIOR'dan SQL Server 7.0'a sayfa düzeyinde kilitleme nedeniyle kaçınmaya çalıştığımız bir şeydi (ve bu noktada sıcak nokta teriminin negatif bir terim olduğu yerdi). Aslında, olumsuz bir terim olmak zorunda değildir. Ancak, depolama altyapısı yeniden arandığı / yeniden tasarlandığı için (SQL Server 7.0'da) ve şimdi gerçek satır düzeyinde kilitlemeyi içerdiğinden, bu motivasyon (sıcak noktaları önlemek için) artık orada değildir.

Düzenle, Mayıs 2013

Lucky7_2000'in cevabındaki bağlantı, sıcak noktaların var olabileceğini ve sorunlara neden olduğunu söylüyor gibi görünüyor. Ancak, makale TranTime'da benzersiz bir kümelenmemiş dizin kullanıyor. Bu, eklenecek bir benzersizleştirici gerektirir. Hangi araçlar dizin değil kesinlikle monotonik (çok geniş ve) artar. Bu cevaptaki bağlantı, bu cevapla ya da bağlantılarımla çelişmiyor

Kişisel düzeyde, kümelenmiş PK olarak büyük bir KİMLİK sütunu olan bir masaya saniyede onbinlerce satır eklediğim veritabanlarında uyandım .


23

Özetlemek gerekirse, modern SQL Server sürümlerinde bir kimlik sütunundaki kümelenmiş bir anahtar bugünlerde tercih edilen seçenektir.


Kısa, basit, noktaya kadar bu benim +1 alır. Orada iyi bir bilgi hazinesi olduğundan SQLSkills'in bağlantısını kontrol ettiğinizden emin olun.
AndrewSQL

12
Bu bir komut gibi geliyor. Neden yapmamız gerektiğine dair bir açıklama veya mantık yok ...
gbn

Sadece bir komut gibi gelmiyor, aynı zamanda yanlış. Sıralı anahtarlar kullanırsanız çok yüksek miktarda ek / sn alan herhangi bir veritabanı sıcak nokta sorunlarına neden olur.
Thomas Kejser

1
Ben zorunlu değil dedim dedim. Dünyadaki veritabanlarının% 98'ini oluşturan normal uygulamalar için bir kimlik sütunundaki kümelenmiş bir anahtar gayet iyi çalışıyor.
mrdenny


4

bu yazıyı kontrol et:

http://blogs.msdn.com/b/sqlserverfaq/archive/2010/05/27/monotonically-increasing-clustered-index-keys-can-cause-latch-contention.aspx

Artan bir anahtara dayalı kümelenmiş bir dizin oluşturmak, performans için kötü olan sıcak noktalar oluşturabilir ...


1
Bu bağlantıyı vermek için +1. Orada bazı ilginç ipuçları var. Ancak, verilen senaryo ile birini, tblTransactions (TranTime) veya diğer bir alternatif üzerinde kümelenmemiş indeks cidx_trantime oluşturmakla karşılaştırmış olsaydı, sonuçların çok daha ikna edici olacağını düşünüyorum. Bu kadar çok veri ürettiğinizde, verileri almanın etkili yolları olmalı, her şeyi bir yığına atamazsınız.
bernd_k

@bernd_k: Bu kötü bir örnek link. Alt tablo, dahili bir birleştirici gerektiren kötü ve benzersiz olmayan bir kümelenmiş anahtara sahip
gbn

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.