Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Indeks partisi Oracle

Pada artikel sebelumnya, kita telah mempelajari tentang tabel Oracle Partitioned. Sebagai kelanjutan dari seri itu, saya di sini akan menyajikan indeks partisi Oracle

Berikut adalah beberapa fakta tentang Memahami Indeks yang Dipartisi

Indeks Partisi Lokal

  • Indeks lokal pada tabel yang dipartisi dibuat di mana indeks dipartisi dengan cara yang persis sama seperti tabel partisi yang mendasarinya. Artinya, indeks lokal mewarisi metode partisi tabel. Ini dikenal sebagai equi-partisi.
  • Untuk indeks lokal, kunci indeks dalam indeks hanya akan merujuk ke baris yang disimpan dalam partisi tabel tunggal yang mendasarinya. Indeks lokal dibuat dengan menentukan atribut LOCAL, dan dapat dibuat sebagai UNIK atau NON-UNIK.
  • Tabel dan indeks lokal dipartisi dengan cara yang persis sama, atau memiliki kunci partisi yang sama karena indeks lokal dipelihara secara otomatis, dapat menawarkan ketersediaan yang lebih tinggi.
  • Karena database Oracle memastikan bahwa partisi indeks disinkronkan dengan partisi tabel yang sesuai, maka database secara otomatis memelihara partisi indeks setiap kali operasi pemeliharaan dilakukan pada tabel yang mendasarinya
  • misalnya, ketika partisi ditambahkan, dijatuhkan, atau digabungkan.
  • Indeks lokal diawali jika kunci partisi tabel dan kunci indeks sama; jika tidak, ini adalah indeks lokal tanpa awalan
SQL> CREATE TABLE EXP_PART (id number, item_id number, name varchar2(20))
  PARTITION BY RANGE (id, item_id)
  (partition EXP_PART_1 values less than (10, 100),
  partition EXP_PART_2 values less than (20, 200),
  partition EXP_PART_3 values less than (30, 300),
  partition EXP_PART_4 values less than (40, 400));
 Table created.

 SQL> CREATE INDEX test_idx ON EXP_PART(id, item_id)
  LOCAL
  (partition test_idx_1,
  partition test_idx_2,
  partition test_idx_3,
  partition test_idx_4);
 Index created.

SQL> SELECT index_name, partition_name, status
  FROM user_ind_partitions where index_name='TEST_IDX'
  ORDER BY index_name, partition_name;
 INDEX_NAME PARTITION_NAME STATUS
 ---------   -----------    ------
 TEST_IDX IX_TEST_IDX_1 USABLE
 TEST_IDX IX_TEST_IDX_2 USABLE
 TEST_IDX IX_TEST_IDX_3 USABLE
 TEST_IDX IX_TEST_IDX_4 USABLE

Indeks yang Dipartisi Global

  • Indeks terpartisi global adalah indeks pada tabel yang dipartisi atau tidak dipartisi yang dipartisi secara independen, yaitu menggunakan kunci partisi yang berbeda dari tabel. Indeks yang dipartisi secara global dapat berupa rentang atau dipartisi dengan hash. Indeks yang dipartisi secara global lebih sulit dipertahankan daripada indeks lokal. Namun, mereka memang menawarkan metode akses yang lebih efisien ke catatan individu mana pun.
  • Selama interaksi tabel atau indeks selama pemeliharaan partisi, semua partisi dalam indeks global akan terpengaruh.
  • Bila partisi tabel yang mendasarinya memiliki operasi pemeliharaan SPLIT, MOVE, DROP, atau TRUNCATE yang dilakukan di atasnya, indeks global dan indeks yang dipartisi global akan ditandai sebagai tidak dapat digunakan. Oleh karena itu, independensi partisi tidak dimungkinkan untuk indeks global.
  • Bergantung pada jenis operasi yang dilakukan pada partisi tabel, indeks pada tabel akan terpengaruh. Saat mengubah partisi tabel, klausa UPDATE INDEXES dapat ditentukan. Ini secara otomatis mempertahankan indeks dan partisi global yang terpengaruh.
  • Keuntungan menggunakan opsi ini adalah indeks akan tetap online dan tersedia selama operasi, dan tidak harus dibangun kembali setelah operasi selesai.
SQL> CREATE TABLE EXP_PART (id number, item_id number, name varchar2(20))
  PARTITION BY RANGE (id, item_id)
  (partition EXP_PART_1 values less than (10, 100),
  partition EXP_PART_2 values less than (20, 200),
  partition EXP_PART_3 values less than (30, 300),
  partition EXP_PART_4 values less than (40, 400));
 Table created.

 SQL> CREATE UNIQUE INDEX EXP_PART_IDX ON EXP_PART(id, item_id)
  GLOBAL PARTITION BY RANGE (id, item_id)
  (partition EXP_PART_IDX_1 values less than (20, 200),
   partition EXP_PART_IDX_2 values less than (maxvalue, maxvalue));
 Index created.

SQL> SELECT index_name, partition_name, status
  FROM user_ind_partitions where index_name='EXP_PART_IDX'
  ORDER BY index_name, partition_name;
 INDEX_NAME PARTITION_NAME STATUS
 
 EXP_PART_IDX EXP_PART_IDX_1 USABLE
 EXP_PART_IDX EXP_PART_IDX_2 USABLE

Indeks Global yang Tidak Dipartisi

  • Indeks global yang tidak dipartisi menawarkan akses efisien yang sama ke setiap record individual di partisi mana pun, dan berperilaku seperti indeks yang tidak dipartisi. Karena struktur indeks tidak dipartisi, indeks tersedia untuk semua partisi.
  • Skenario di mana jenis indeks ini akan berguna adalah dengan kueri yang tidak menyertakan kunci partisi tabel sebagai filter, tetapi Anda masih ingin pengoptimal Oracle menggunakan indeks

FAQ

Apakah indeks yang diawali dan tidak diawali?

Indeks disebut prefixed jika kolom terdepan dalam definisi indeks adalah kolom kunci partisi, jika tidak maka disebut non-prefixed.

Dapatkah kita mensubpartisi indeks global?

Tidak, Anda tidak dapat membuat subpartisi indeks global, tetapi Anda dapat mempartisinya. Satu-satunya cara untuk mengakhiri dengan subpartisi indeks adalah dengan memiliki tabel yang dipartisi dengan indeks lokal

Cara Mengetahui Apakah Indeks Bersifat Global atau Lokal

Dengan menanyakan kolom, LOCALITY, di DBA_PART_INDEXES.

Juga Dibaca

  • Tutorial Administrasi database Oracle
  • https://docs.Oracle.com/en/database/Oracle/Oracle-database/18/vldbg/index-partitioning.html#GUID-569F94D0-E6E5-45BB-9626-5506DE18FF00
  • mengubah format tanggal di oracle


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PERIKSA batasan tanggal lahir?

  2. SQL*Plus bagaimana cara menerima variabel teks dari prompt?

  3. Logika Bisnis:Basis Data atau Lapisan Aplikasi

  4. cara mengekspor data dari tabel log ke badan email di oracle

  5. Ringan Singkatnya