Teradata - Indeks Utama yang Dipartisi

Partitioned Primary Index (PPI) adalah mekanisme pengindeksan yang berguna dalam meningkatkan kinerja kueri tertentu. Saat baris disisipkan ke dalam tabel, baris tersebut disimpan di AMP dan disusun berdasarkan urutan hash barisnya. Ketika tabel didefinisikan dengan PPI, baris diurutkan berdasarkan nomor partisi mereka. Dalam setiap partisi, mereka diatur oleh hash baris mereka. Baris ditetapkan ke partisi berdasarkan ekspresi partisi yang ditentukan.

Keuntungan

  • Hindari pemindaian tabel penuh untuk kueri tertentu.

  • Hindari menggunakan indeks sekunder yang memerlukan struktur fisik tambahan dan pemeliharaan I / O tambahan.

  • Akses subset dari tabel besar dengan cepat.

  • Jatuhkan data lama dengan cepat dan tambahkan data baru.

Contoh

Pertimbangkan tabel Pesanan berikut dengan Indeks Utama di OrderNo.

TokoNo Nomor pesanan Tanggal pemesanan OrderTotal
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

Asumsikan bahwa record didistribusikan di antara AMP seperti yang ditunjukkan pada tabel berikut. Rekaman disimpan di AMP, diurutkan berdasarkan hash barisnya.

AMP 1

RowHash Nomor pesanan Tanggal pemesanan
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash Nomor pesanan Tanggal pemesanan
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

Jika Anda menjalankan kueri untuk mengekstrak pesanan untuk tanggal tertentu, maka pengoptimal dapat memilih untuk menggunakan Pemindaian Tabel Lengkap, kemudian semua catatan dalam AMP dapat diakses. Untuk menghindari hal ini, Anda dapat menentukan tanggal pemesanan sebagai Partitioned Primary Index. Ketika baris disisipkan ke dalam tabel pesanan, mereka dipartisi berdasarkan tanggal pemesanan. Dalam setiap partisi mereka akan diurutkan berdasarkan hash baris mereka.

Data berikut menunjukkan bagaimana record akan disimpan di AMP, jika dipartisi berdasarkan Tanggal Pemesanan. Jika kueri dijalankan untuk mengakses catatan menurut Tanggal Pemesanan, maka hanya partisi yang berisi catatan untuk pesanan tertentu yang akan diakses.

AMP 1

Partisi RowHash Nomor pesanan Tanggal pemesanan
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

Partisi RowHash Nomor pesanan Tanggal pemesanan
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

Berikut ini adalah contoh membuat tabel dengan indeks utama partisi. PARTITION BY klausa digunakan untuk mendefinisikan partisi.

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
);

Dalam contoh di atas, tabel dipartisi oleh kolom OrderDate. Akan ada satu partisi terpisah untuk setiap hari.