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.
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 |
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.
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 |
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.