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

Kisah Dua Faktor Pengelompokan

Saya sedang melihat posting di forum MOSC hari ini tentang Clustering Factor (CF) untuk indeks. Satu hal yang cenderung dilupakan orang ketika berbicara tentang CF adalah bahwa sementara DBA dapat melakukan beberapa aktivitas reorg untuk meningkatkan CF untuk suatu indeks, hal itu berpotensi mengorbankan indeks lain untuk tabel yang sama. Pertimbangkan contoh ini yang saya berikan di utas itu.

Di sini saya memiliki tabel dengan dua indeks. Ini satu-satunya tabel dalam skema saya. Satu indeks (BEI2) memiliki CF yang jauh lebih tinggi dari yang lain (BEI1).

SQL> select index_name,clustering_factor from user_indexes;
INDEX_NAME      CLUSTERING_FACTOR
--------------- -----------------
MY_TAB_IDX2                135744
MY_TAB_IDX1                  2257

DBA ingin "memperbaiki" masalah ini. DBA ingin mengurangi CF untuk IDX2. Cara terbaik untuk melakukannya adalah dengan menarik data keluar dari tabel dan kemudian menyisipkannya kembali, diurutkan berdasarkan kolom tempat IDX2 dibangun.

SQL> create table my_tab_temp as select * from my_tab;
Table created.
SQL> truncate table my_tab;
Table truncated.
SQL> insert into my_tab select * from my_tab_temp order by pk_id;
135795 rows created.
SQL> commit;
Commit complete.
SQL> exec dbms_stats.gather_table_stats(ownname=>USER,tabname=>'MY_TAB',cascade=>TRUE);
PL/SQL procedure successfully completed.
SQL> select index_name,clustering_factor from user_indexes;
INDEX_NAME      CLUSTERING_FACTOR
--------------- -----------------
MY_TAB_IDX2                  2537
MY_TAB_IDX1                135747

Sekarang CF untuk IDX2 sudah pasti meningkat. Tapi lihat CF di IDX1. Itu menjadi jauh lebih buruk. Faktanya, kedua indeks tersebut tampaknya telah membalik nilai CF. Jika saya mencoba mengatur ulang, kali ini saya memesan berdasarkan kolom IDX1, maka nilai CF akan terbalik lagi.

Moral dari cerita ini adalah bahwa seseorang tidak dapat menjamin bahwa meningkatkan CF untuk satu indeks tidak akan berdampak negatif pada indeks lain dari tabel tersebut.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sepuluh Alasan Teratas untuk Bermigrasi dari Oracle ke PostgreSQL

  2. Cross Gabung di Oracle

  3. Memperbaiki kesalahan ORA-65096 saat membuat tes otomatis di Django menggunakan Oracle

  4. Tabel partisi Oracle

  5. ORA-00903:nama tabel tidak valid di PreparedStatement