Teradata - Bölümlendirilmiş Birincil Dizin
Partitioned Primary Index (ÜFE), belirli sorguların performansını iyileştirmede yararlı olan bir indeksleme mekanizmasıdır. Satırlar bir tabloya eklendiğinde, bir AMP'de depolanır ve satır hash sırasına göre düzenlenir. Bir tablo PPI ile tanımlandığında, satırlar bölüm numaralarına göre sıralanır. Her bölüm içinde, satır hashlerine göre düzenlenirler. Satırlar, tanımlanan bölüm ifadesine göre bir bölüme atanır.
Avantajlar
Belirli sorgular için tam tablo taramasından kaçının.
Ek fiziksel yapı ve ek G / Ç bakımı gerektiren ikincil dizini kullanmaktan kaçının.
Büyük bir tablonun bir alt kümesine hızla erişin.
Eski verileri hızla bırakın ve yeni veriler ekleyin.
Misal
SiparişNo'da Birincil Endeks içeren aşağıdaki Siparişler tablosunu göz önünde bulundurun.
MağazaNo | Sipariş No | Sipariş tarihi | Sipariş toplamı |
---|---|---|---|
101 | 7501 | 2015-10-01 | 900 |
101 | 7502 | 2015-10-02 | 1.200 |
102 | 7503 | 2015-10-02 | 3.000 |
102 | 7504 | 2015-10-03 | 2.454 |
101 | 7505 | 2015-10-03 | 1201 |
103 | 7506 | 2015-10-04 | 2.454 |
101 | 7507 | 2015-10-05 | 1201 |
101 | 7508 | 2015-10-05 | 1201 |
Aşağıdaki tablolarda gösterildiği gibi kayıtların AMP'ler arasında dağıtıldığını varsayın. Kaydedilenler, satır karmalarına göre sıralanan AMP'lerde saklanır.
RowHash | Sipariş No | Sipariş tarihi |
---|---|---|
1 | 7505 | 2015-10-03 |
2 | 7504 | 2015-10-03 |
3 | 7501 | 2015-10-01 |
4 | 7508 | 2015-10-05 |
RowHash | Sipariş No | Sipariş tarihi |
---|---|---|
1 | 7507 | 2015-10-05 |
2 | 7502 | 2015-10-02 |
3 | 7506 | 2015-10-04 |
4 | 7503 | 2015-10-02 |
Belirli bir tarih için siparişleri çıkarmak için bir sorgu çalıştırırsanız, optimize eden kişi Tam Tablo Taramasını kullanmayı seçebilir, ardından AMP içindeki tüm kayıtlara erişilebilir. Bunu önlemek için sipariş tarihini Bölümlenmiş Birincil Dizin olarak tanımlayabilirsiniz. Siparişler tablosuna satırlar eklendiğinde, sipariş tarihine göre bölümlenirler. Her bölüm içinde satır hash'lerine göre sıralanacaklar.
Aşağıdaki veriler, Sipariş Tarihine göre bölümlenmişlerse kayıtların AMP'lerde nasıl depolanacağını gösterir. Kayıtlara Sipariş Tarihine göre erişmek için bir sorgu çalıştırılırsa, yalnızca söz konusu sipariş için kayıtları içeren bölüme erişilir.
Bölüm | RowHash | Sipariş No | Sipariş tarihi |
---|---|---|---|
0 | 3 | 7501 | 2015-10-01 |
1 | 1 | 7505 | 2015-10-03 |
1 | 2 | 7504 | 2015-10-03 |
2 | 4 | 7508 | 2015-10-05 |
Bölüm | RowHash | Sipariş No | Sipariş tarihi |
---|---|---|---|
0 | 2 | 7502 | 2015-10-02 |
0 | 4 | 7503 | 2015-10-02 |
1 | 3 | 7506 | 2015-10-04 |
2 | 1 | 7507 | 2015-10-05 |
Aşağıda, birincil Dizin bölümü içeren bir tablo oluşturmak için bir örnek verilmiştir. PARTITION BY yan tümcesi, bölümü tanımlamak için kullanılır.
CREATE SET TABLE Orders (
StoreNo SMALLINT,
OrderNo INTEGER,
OrderDate DATE FORMAT 'YYYY-MM-DD',
OrderTotal INTEGER
)
PRIMARY INDEX(OrderNo)
PARTITION BY RANGE_N (
OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);
Yukarıdaki örnekte tablo, SiparişTarihi sütununa göre bölümlenmiştir. Her gün için ayrı bir bölüm olacaktır.