sql >> Databasteknik >  >> RDS >> Oracle

En berättelse om två klustringsfaktorer

Jag tittade på ett inlägg på MOSC-forumen idag om Clustering Factor (CF) för ett index. En sak som folk tenderar att glömma när de pratar om CF är att även om DBA kan göra någon omorganiseringsaktivitet för att förbättra CF för ett index, kommer det potentiellt att komma på bekostnad av ett annat index för samma tabell. Tänk på det här exemplet som jag gav i den tråden.

Här har jag en tabell med två index. Det är den enda tabellen i mitt schema. Det ena indexet (IDX2) har en CF som är mycket högre än det andra (IDX1).

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

DBA vill "fixa" det här problemet. DBA vill minska CF för IDX2. Det bästa sättet att göra det är att dra ut data från tabellen och sedan infoga tillbaka, sorterade efter kolumnen/kolumnerna IDX2 bygger på.

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

Nu har CF för IDX2 definitivt förbättrats. Men titta på CF på IDX1. Det blev mycket värre. Faktum är att de två indexen verkade ha vänt CF-värdena. Om jag försöker med en annan omorganisation, den här gången efter IDX1-kolumn(erna), kommer CF-värdena att vända igen.

Moralen i den här historien är att man inte kan garantera att en förbättring av CF för ett index inte kommer att ha en negativ inverkan på ett annat index i den tabellen.


  1. GROUP_CONCAT med gräns

  2. Laravel:Angiven nyckel var för lång; max nyckellängd är 767 byte

  3. Hur man installerar Cassandra v3 på CentOS 6

  4. 8 WP-CLI-kommandon för att rensa upp och optimera din webbplats