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.

AMP 1

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

AMP 2

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.

AMP 1

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

AMP 2

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.