Meilleure façon d'ajouter une colonne avec la valeur par défaut lorsqu'elle est sous charge
Lors de l'ajout d'une colonne à une table qui a une valeur par défaut et une contrainte not null. Est-il préférable de l'exécuter comme une seule déclaration, ou de le diviser en étapes tandis que la base de données est sous la charge.
ALTER TABLE user ADD country VARCHAR2(4) DEFAULT 'GB' NOT NULL
CONTRE
ALTER TABLE user ADD country VARCHAR2(2)
UPDATE user SET country = 'GB'
COMMIT
ALTER TABLE user MODIFY country DEFAULT 'GB' NOT NULL
- Combien de lignes existent dans de l'UTILISATEUR de votre table?
- 10 000 lignes existent dans la table user.
- Pouvez-vous mesurer la performance ?
- Kiquenet, je ne suis pas un db de rendement expert, mais à partir d'expériences passées, je trouve la mesure de perf dans la db, incroyablement difficile en raison des Oracles les caches internes etc.
- Ce n'cette question ont à faire avec not NULL? C'est à dire, pourquoi est-ce pertinent pour l'optimisation par DÉFAUT?
Vous devez vous connecter pour publier un commentaire.
La Performance dépend de la version Oracle que vous utilisez. Les verrous sont générés de toute façon.
Si la version <= Oracle 11.1 puis #1 fait la même chose que #2. Il est lent de toute façon.
Début avec Oracle 11.2, Oracle a introduit une grande optimisation pour la première instruction (une commande de le faire). Vous n'avez pas besoin de modifier la commande Oracle juste se comporte différemment. Il stocke la valeur par défaut uniquement dans dictionnaire de données au lieu de la mise à jour de chaque ligne physique.
Mais je dois dire, que j'ai rencontré quelques bugs dans le passé liés à cette fonction (dans Oracle 11.2.0.1)
Je pense que ces problèmes sont résolus dans la version actuelle 11.2.0.3, alors je vous conseille d'utiliser cette fonctionnalité.
Il y a quelques temps, nous avons évalué les solutions possibles pour résoudre le même problème. Sur notre projet, nous avons dû supprimer tous les index de table, effectuer les modifier et de les restaurer index retour.
Si votre système doit être à l'aide de la table puis DBMS_Redefinition est vraiment votre seul choix.