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

customer.pk_name rejoignant transactions.fk_name vs. customer.pk_id [série] rejoignant transactions.fk_id [entier]

Ils ont raison. Joindre un champ de texte CHAR(30) - en particulier un contenant des données de nom de personne - sera lent, extrêmement inefficace et incroyablement fragile. Les gens changent de nom (le mariage en est l'exemple évident), et plusieurs personnes peuvent porter le même nom.

Vous souhaitez créer des index appropriés sur vos tables pour prendre en charge l'ordre dans lequel vous souhaitez que les données apparaissent et oublier le clustering. Votre procédure d'optimisation des performances ressemble à un désastre à la recherche d'un endroit où se produire. Désolé, mais supprimer/créer des tables comme ça pose problème.

Je commencerais par un INDEX UNIQUE sur customer.id, un INDEX UNIQUE sur transaction.ticket_number et un INDEX (pour les performances plutôt que la cardinalité, donc l'application de l'unicité n'est pas très importante) sur les transactions (id, ticket_number DESC), et le prends de là. Les données sont renvoyées de la table des transactions dans l'ordre dans lequel elles apparaissent dans l'index.

Je n'envisagerais le clustering que lorsque toutes les autres voies d'optimisation des requêtes auraient été épuisées.