PK ile Tablo arasındaki sıkıştırma arasındaki fark nedir?


9

Veri sıkıştırma tablodan ayarlanabilir:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 )
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)

Ve Birincil anahtarda tanımlanabilir:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 ) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId) 

Ama ikisine de koyarsanız, bu hatayı alırsınız:

DATA_COMPRESSION seçeneği, tablo için veya tablo bölümlenmişse bölümlerinden en az biri için birden çok kez belirtildi.

PK ve masaya koymanın bir farkı var mı?


Eğer birincil anahtar olsaydı fark olurdu sizce değil tablonun kümelenmiş sütun? :)
LowlyDBA

1
@JohnM: Öyle sanırım, ama bilmiyorum. (Bu yüzden soruyorum :)
Vaccano

Yanıtlar:


14

Birincil anahtara sıkıştırma koymak değil, sıkıştırmayı kümelenmiş dizine koymakla ilgilidir . SQL Server için, kümelenmiş bir dizin tablonun fiziksel yapısını bu dizin üzerinde düzenler. Veya, daha kısa biçimde, kümelenmiş dizin tablodur. Bu, kümelenmiş dizinin sıkıştırılması ve tablonun sıkıştırılmasının işlevsel olarak eşdeğer olduğu anlamına gelir. Birincil anahtarınızı kümelenmemiş bir dizin olarak oluşturacak ve temel tabloyu bir yığın olarak tutacak olsaydınız, bu iki yapı farklı olacak ve ayrı olarak sıkıştırılacaktı.


Tüm rasyonaliteye meydan okuyarak, birincil anahtarınızı kümelenmemiş bir dizin haline getirdiyseniz ve farklı bir kümelenmiş dizin oluşturduysanız ne olur? Sıkıştırma yine aynı mı olur?
Ross Presser

1
Olmaz. Burada birincil anahtarı düşünmeyin, önemsizdir. Burada, kümelenmiş ve kümelenmemiş dizinlere odaklanmamız gerekir. Aynı nesne oldukları için kümelenmiş bir dizini ve tabloyu ayrı ayrı sıkıştıramazsınız. kümelenmiş dizinler / tablolar ve kümelenmemiş dizinler farklı nesnelerdir ve tek tek sıkıştırılması gerekir.
Mike Fal

Kendimi kötü ifade ettim. Cevabınız tam olarak sürdüğüm şey - kümelenmiş dizin sıkıştırılabilir (dizine eklenecek ne olursa olsun) veya yığın sıkıştırılabilir (eğer kümelenmiş dizin yoksa), her ikisi de değil. Kümelenmemiş bir dizin de ayrı olarak sıkıştırılabilir.
Ross Presser

Tam olarak, ancak açık olmak gerekirse, aynı tabloda bir yığın ve kümelenmiş bir dizine sahip olamazsınız. Biri ya da diğeri. SQL Server'ın davranışı nedeniyle, insanların birincil anahtarları kümelenmiş dizinlerle karıştırması yaygındır, bu nedenle farkın bu yanıt için anlaşıldığından emin olmak istiyorum.
Mike Fal
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.