creation d'index , stat oracle ???

creation d'index , stat oracle ??? - SQL/NoSQL - Programmation

Marsh Posté le 16-02-2007 à 11:32:07    

salut,
 
Les index permette d'accelerer les recherches sur une table;
donc avant d'alimenter ma tables,je crée les index.
en théorie on devrait faire :
create table puis un create index et ensuite un insert des valeurs, c'est bien cela
supposons que ma table contienne deja des données je peux quand même crée un index ?
 
Le calcul des statistique se fait, une fois que j'ai crée ma table et mes index ou apres avoir inserer des données dans ma tables ?
 
 
Merci.

Reply

Marsh Posté le 16-02-2007 à 11:32:07   

Reply

Marsh Posté le 16-02-2007 à 11:53:10    

alors plusieurs choses :
 
- la création d'index, tu la fais quand tu veux, elle s'alimente en même temps que les données
si ta table contient déjà des données, l'index contiendra une indexation de tes données
si des données sont ajoutées, ton index sera modifiée
 
- les calculs de stats se font quand tu veux, elle influent sur le plan d'exécution lorsque tu requetes tes tables, l'idéal est de lancer des stats quand tu as beaucoup de données qui ont évolués (donc dans ton cas quand tu auras inséré tes données)
Si tu peux de les lancer de manière régulière, fais-le

Reply

Marsh Posté le 16-02-2007 à 14:21:52    

a noter qu'il est préférable de désactiver les index lorsque tu allimentes une table avec beaucoup de données d'un coup. en effet, les index sont remplis ligne par ligne, et cela peut ralentir un lot de requêtes insert.
idem pour delete ou update.
 
ceci dit, la désactivation ne doit s'appliquer que lors d'un traîtement "batch". jamais en utilisation normale : en effet, si tu désactives les index pendant que des utilisateurs font des requêtes sur la table, soit tu vas aller plus vite, mais tout les autres iront plus lentement, ce qui n'est pas souhaitable.
 
alternativement, pour charger un gros volume d'un coup, tu peux passer par un SQL Loader, qui ne recalcule les index qu'à la fin du traîtement (seule les index de type contrainte sont testés et mis à jour). idem pour supprimer des données, dans ce cas il vaut mieux utiliser TRUNCATE, qui ne recalcule pas les index avant la fin de l'exécution. attention cependant : le truncate n'est pas rollbackable !

Reply

Marsh Posté le 16-02-2007 à 16:08:31    

pour les stats tu peux utiliser le packages existant

 
Code :
  1. BEGIN
  2. DBMS_STATS.gather_schema_stats(ownname => 'nom_shema',cascade=>true);
  3. END;
  4. /
 

ça passera les stats sur tous les objets du shema 'nom_shema' ( indexes et tables principalement )
a ne pas passer sur les shema sys et system par contre.

 

des indexes sont placés automatiquement par le moteur oracle sur certains objets ( primary key par exemple ), donc pas besoin de redefinir des indexes pour ces objets. ( sauf si tu les definis explicitement a la création de table, cf la doc oracle pour plus de détails )

 


P.S. je suis sous 9i, donc la syntaxe est peut etre pas bonne pour les autres versions

Message cité 1 fois
Message édité par ajnag le 16-02-2007 à 16:09:26
Reply

Marsh Posté le 16-02-2007 à 16:12:22    

c'est la même syntaxe sous 8i et 10g

Reply

Marsh Posté le 16-02-2007 à 16:35:55    

ajnag a écrit :


ça passera les stats sur tous les objets du shema 'nom_shema' ( indexes et tables principalement )
a ne pas passer sur les shema sys et system par contre.


 
Si si, en 9i ça peut être passé sur SYS et d'ailleurs en 10g c'est systématique il me semble :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed