Oracle
 sql >> база данни >  >> RDS >> Oracle

Разказ за два фактора на групиране

Днес разглеждах публикация във форумите на MOSC за фактора на клъстериране (CF) за индекс. Едно нещо, което хората са склонни да забравят, когато говорят за CF, е, че докато DBA може да извърши някаква реорганизация, за да подобри CF за даден индекс, това потенциално ще дойде за сметка на друг индекс за същата таблица. Помислете за този пример, който предоставих в тази тема.

Тук имам таблица с два индекса. Това е единствената таблица в моята схема. Един индекс (IDX2) има CF много по-висок от другия (IDX1).

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

DBA иска да „поправи“ този проблем. DBA иска да намали CF за IDX2. Най-добрият начин да направите това е да извадите данните от таблицата и след това да ги вмъкнете обратно, сортирани по колоните, върху които е изграден IDX2.

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

Сега CF за IDX2 определено се подобри. Но вижте CF на IDX1. Стана много по-зле. Всъщност двата индекса изглежда са обърнали стойностите на CF. Ако опитам друга реорганизация, този път подреждане по колона(и) IDX1, тогава стойностите на CF ще се обърнат отново.

Моралът на тази история е, че не може да се гарантира, че подобряването на CF за един индекс няма да има отрицателно въздействие върху друг индекс от тази таблица.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Има ли начин да получите скорошни грешки в синтаксиса на SQL?

  2. Експортирайте данни в JSON файл в Oracle 11g с помощта на PL/SQL

  3. Как да инсталирате SQLcl на Mac

  4. Метод за събиране:Процедура за отрязване в базата данни на Oracle

  5. Преобразуване на Unix Timestamp в стойност на дата в Oracle