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

Performance :sous-requête ou jointure

Les RDBM modernes, y compris Oracle, optimisent la plupart des jointures et des sous-requêtes jusqu'au même plan d'exécution.

Par conséquent, j'irais de l'avant et j'écrirais votre requête de la manière la plus simple pour vous et je me concentrerais sur l'optimisation complète de vos index.

Si vous fournissez votre requête finale et votre schéma de base de données, nous pourrons peut-être vous proposer des suggestions détaillées, notamment des informations sur les problèmes de verrouillage potentiels.

Modifier

Voici quelques conseils généraux qui s'appliquent à votre requête :

  • Pour les jointures, assurez-vous d'avoir un index sur les colonnes sur lesquelles vous vous joignez. Assurez-vous d'appliquer un index aux colonnes jointes dans les deux tables. Vous pourriez penser que vous n'avez besoin de l'index que dans une direction, mais vous devriez indexer les deux, car parfois la base de données détermine qu'il est préférable de joindre dans la direction opposée.
  • Pour les clauses WHERE, assurez-vous que vous disposez d'index sur les colonnes mentionnées dans WHERE.
  • Pour insérer plusieurs lignes, il est préférable de toutes les insérer dans une seule requête.
  • Pour insérer sur une table avec un index clusterisé, il est préférable d'insérer des valeurs incrémentielles pour l'index clusterisé afin que les nouvelles lignes soient ajoutées à la fin des données. Cela évite de reconstruire l'index et évite souvent les verrous sur les enregistrements existants, ce qui ralentirait les requêtes SELECT sur les lignes existantes. Fondamentalement, les insertions deviennent moins pénibles pour les autres utilisateurs du système.