Oracle
 sql >> Base de données >  >> RDS >> Oracle

Est-il sûr de mettre un index sur une table temporaire Oracle ?

Je suppose que nous parlons de GLOBAL TEMPORARY tableaux.

Considérez une table temporaire comme plusieurs tables créées et supprimées par chaque processus à la volée à partir d'un modèle stocké dans le dictionnaire système .

Dans Oracle , DML d'une temporary table affecte tous les processus, tandis que les données contenues dans la table n'affecteront qu'un seul processus qui les utilise.

Données dans une temporary table est visible uniquement à l'intérieur de la portée de la session. Il utilise TEMPORARY TABLESPACE pour stocker à la fois les données et les éventuels index.

DML pour une temporary table (c'est-à-dire sa mise en page, y compris les noms de colonne et les index) est visible par tout le monde avec des privilèges suffisants.

Cela signifie que l'existence de l'index affectera votre processus ainsi que d'autres processus utilisant la table en ce sens que tout processus qui modifie les données dans la temporary table devra également modifier l'index.

Données contenus dans la table (et dans l'index aussi), au contraire, n'affecteront que le processus qui les a créés, et ne seront même pas visibles pour les autres processus.

SI vous souhaitez qu'un processus utilise l'index et qu'un autre ne l'utilise pas, procédez comme suit :

  • Créer deux temporary tables avec la même disposition de colonne
  • Index sur l'un d'entre eux
  • Utiliser une table indexée ou non indexée selon le processus