Bir dizini hizalamadan bölümlememenin bir avantajı var mı?


9

Büyük bir bölümlenmiş OLAP tablosunu yönetme ayrıcalığım var. Bu tabloyu incelerken dizinlerden birinin bölümleme şemasına uygun olmadığını fark ettim. Yazar mevcut olmadığından ve özenle hazırlanmış Google aramaları herhangi bir yararlı sonuç vermediğinden, bunun kasıtlı mı yoksa yanlışlıkla mı olduğundan emin değilim.

Bir dizini SQL Server 2008 üzerinde hizalamak için herhangi bir neden var mı?


1
Muhtemelen. Bu dizinin kullanılıp kullanılmadığını görmek için dizin istatistikleri kullanımınızı sorgulayın. Öyleyse, bu dizine isabet eden sorguları yakalamak için genişletilmiş olaylar veya sunucu tarafı izlemesi kullanın. Eğer bölüm hizalanmış bir dizinde daha iyi performans gösterirlerse, harika. Değilse, gerçekten hizalanmamış bölümlenmiş dizinlere ihtiyaç duyup duymadıklarını kontrol edin. Eğer yapmazlarsa, gelecekteki sorgular bundan yararlanabileceğinden bölümün yine de hizalanmış olmasını söyleyebilirim. Tabii ki, eğer maliyet / çaba / kesinti çok yüksek ise yapmayın.
Ali Razeghi

Ne bölümlenmiş bir tablo dizin için en iyi uygulama okudum gelen bölümü bölümleme düzeni ile hizalamak için. Bu tablo bana bir dizini bölüm şemasına hizalamamak için bir kullanım durumunu anlamak istediğimi düşündürdü. Analiz edilmesi gereken bir sorgu yok bu yüzden belirli bir sorunu çözmeye çalışmıyorum.
Robin

Hizalanmamış bir dizin tasarlamak için başka bir neden, bölümleme sütununu içermeyen benzersiz bir dizindir (birincil anahtar veya benzersiz kısıtlama dahil). Bu durumda, dizin hiç bölümlenmemeli veya farklı bir işlev / şema kullanılarak bölümlenmemelidir.
Dan Guzman

Yanıtlar:


11

Bölümlenmiş bir temel nesne üzerinde (benzersiz olmayan) dizin bölümleme olmayan ana avantajı bir çevresinde çalışır olmasıdır uzun süreli sorgu iyileştirici sınırlama gibi sıralı veri talepleri ile ilgili MIN, MAXveya TOP (n)sorgu.

Bir bölümlenmiş endeksi günü, iyileştirici genellikle tercüme edemez MIN, MAXya da TOP (n)aynı operasyona bölüm başına , başına bölme kısmi agrega üzerine nihai küresel agrega izledi. Optimize edici bunun yerine dizinin tüm bölümlerini tarayan bir yürütme planı seçer. Bunun istisnası, toplama veya üst işlemin bölümleme sütunu üzerinde belirtildiği tek durumdur.

Herhangi bir hizalı indeks olmamak için çok iyi nedenler olduğunu da belirtmeliyim . Hizasız bir dizin kullanmayı seçmek çok bilgili bir seçim olacaktır. Geçmişte (nadiren) kendim yaptım, ancak faydaların maliyetlerden açıkça daha ağır bastığı çok özel durumlarda veya başka makul bir alternatif yoktu.


Itzik Ben-Gan'ın konuyu açıklayan makalesi .


3

Hizalanmamış bir indeks gerektiren bazı kısıtlamaların (ör. Benzersiz) etrafında bariz bir sorun vardır .

Bunun dışında, hizalanmamış dizinlerin büyük bir maliyeti vardır (öncelikle birçok paralel operatörün bölüm başına iş parçacığına gitmesini önler ve alternatifler bellek pahalıdır) ve bu nedenle bu tür dizinlere karşı şiddetle tavsiye ederim. Paul tarafından listelenen vakalarda bile, yine de hizalanmamış dizinlere karşı tavsiyede bulunacağım.


1
Evet. Hizasız bir endeks seçmek çok bilgili bir seçim olmalıdır. Geçmişte (nadiren) kendim yaptım, ancak faydaların maliyetlerden ağır bastığı çok özel durumlarda.
Paul White 9

2

Hizalanmayan dizinler, bölümleri değiştiren bölümlemenin birincil faydasını ortadan kaldırır. Buna bağlı değilseniz ve başka nedenlerle (farklı depolama, salt okunur bölümler, artımlı istatistikler, ...) bölümleme yapıyorsanız, devam edin ve hizalanmamış indexex oluşturun.

Hizalı olmayan dizinler kullanışlıdır, çünkü tablonun tamamında benzersiz kısıtlamalar uygulayabilirsiniz. Ayrıca, hizalanmayan dizinler bölümleme anahtarının örtük arama öneki olmasını gerektirmez. Bölümleme anahtarına dayanmayan 10000 bölümün ve sorgulamanın olduğunu düşünün. Eğer indeks hizalanmışsa, yürütme planı 10000 bölüme gitmelidir. Diğer cevapların başka örnekleri de var.

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.