Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Câu chuyện về hai yếu tố phân nhóm

Hôm nay tôi đang xem một bài đăng trên diễn đàn MOSC về Hệ số phân cụm (CF) cho một chỉ số. Một điều mà mọi người có xu hướng quên khi nói về CF là trong khi DBA có thể thực hiện một số hoạt động tổ chức lại để cải thiện CF cho một chỉ số, nó có khả năng phải trả một chỉ số khác cho cùng một bảng đó. Hãy xem xét ví dụ này mà tôi đã cung cấp trong chuỗi đó.

Ở đây tôi có một bảng với hai chỉ mục. Đây là bảng duy nhất trong lược đồ của tôi. Một chỉ mục (IDX2) có CF cao hơn nhiều so với chỉ mục kia (IDX1).

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

DBA muốn "khắc phục" vấn đề này. DBA muốn giảm CF cho IDX2. Cách tốt nhất để làm điều đó là kéo dữ liệu ra khỏi bảng và sau đó chèn trở lại, được sắp xếp theo (các) cột mà IDX2 được xây dựng trên đó.

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

Bây giờ CF cho IDX2 chắc chắn đã được cải thiện. Nhưng hãy nhìn vào CF trên IDX1. Nó trở nên tồi tệ hơn nhiều. Trên thực tế, hai chỉ số dường như đã thay đổi giá trị CF. Nếu tôi cố gắng reorg antoher, lần này sắp xếp theo (các) cột IDX1, thì các giá trị CF sẽ lật lại.

Đạo lý của câu chuyện này là người ta không thể đảm bảo rằng việc cải thiện CF cho một chỉ số sẽ không có ảnh hưởng tiêu cực đến một chỉ số khác của bảng đó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa bộ nhớ cache cấp 2 ở chế độ Hibernate sau khi cập nhật DB theo cách thủ công

  2. Làm thế nào để cài đặt gói ROracle trên Windows 7?

  3. Làm cách nào để tôi có thể đưa ra một lệnh duy nhất từ ​​dòng lệnh thông qua sql plus?

  4. Chọn hàng thứ N từ một bảng trong Oracle

  5. Di chuyển Cơ sở dữ liệu Oracle từ AWS EC2 sang AWS RDS, Phần 4