2010-04-05 8 views
4

Je charge un grand nombre de lignes dans une table à partir d'un fichier de données CSV. Pour chaque 10000 enregistrements je veux mettre à jour les index sur la table pour l'optimisation (statistiques de mise à jour). Tout corps me dit quelle est la commande que je peux utiliser? Ce qui est équivalent dans SQL Server "UPDATE STATISTICS" dans Oracle.is Update statistics signifie optimisation de l'index ou statistiques de gatehring. J'utilise Oracle 10g et 11g. Merci d'avance.Quelle est la commande pour l'optimisation de l'index et les statistiques de mise à jour pour Oracle 10g et 11g?

Répondre

7

L'optimisation de l'index est une question délicate. Vous pouvez COALESCE un index pour éliminer les blocs vides adjacents, et vous pouvez RECONSTRUIRE un index pour complètement détruire et recréer. À mon avis, ce que vous voudrez peut-être faire pendant la période de chargement de vos données, c'est de rendre les index inutilisables, puis lorsque vous aurez terminé, de les RECONSTRUIRE.

ALTER INDEX my_table_idx01 DISABLE; 

-- run loader process 

ALTER INDEX my_table_idx01 REBUILD; 

Vous voulez seulement de recueillir des statistiques une fois que lorsque vous avez terminé, et cela est fait avec un appel à DBMS_STATS, comme ceci:

EXEC DBMS_STATS.GATHER_TABLE_STATS ('my_schema', 'my_table'); 
0

Je vous recommande de prendre une approche différente. Je laisserais tomber l'index (es), chargerais les données et recréerais alors l'index. Après l'avoir activé, Oracle va créer un bon index sur les données que vous venez de charger. Deux choses sont accomplies ici, les enregistrements se chargeront plus rapidement et l'index sera reconstruit avec un arbre correctement équilibré. (Remarque: Faites attention ici, si la table est une très grande table, vous devrez peut-être déclarer un espace de table temporaire pour que cela fonctionne.)

drop index my_index; 

-- uber awesome loading process 

create index my_index on my_table(my_col1, my_col2); 
drop index my_index; 

-- uber awesome loading process 

create index my_index on my_table(my_col1, my_col2);