J'ai le même "problème" que décrit dans (Last record of Join table): Je dois joindre une "table principale" avec un "tableau d'historique" alors que je ne veux que rejoindre le dernier (par date) Enregistrement de la table d'historique. Donc, chaque fois que j'interroge un enregistrement pour la table principale, je trouve aussi les "dernières" données de la table d'historique.Dernier enregistrement d'une table de jointure (comment optimiser)
Master Table
ID
FIRSTNAME
LASTNAME
...
History Table
ID
LASTACTION
DATE
Ceci est possible en se joignant à deux tables et en utilisant un sous-sélection pour récupérer le dernier enregistrement de la table d'historique comme décrit dans la réponse donnée dans le lien ci-dessus.
Mes questions sont: Comment puis-je résoudre le problème, qu'il pourrait y avoir en théorie deux historiques avec la même date?
Est-ce que ce genre de jonction avec le sous-réseau est vraiment la meilleure solution en termes de performance (et en général)? Que pensez-vous (je ne suis pas expert dans tous ces domaines) si j'intègre un autre attribut dans la table Historique nommé "ISLATESTRECORD" comme un indicateur booléen que je gère manuellement (et qui a une contrainte unique). Cet attribut sera alors marquer explicitement le dernier enregistrement et je ne pas besoin de sous-requêtes que je peux utiliser directement cet attribut dans la clause where de la jointure. D'un autre côté, cela rend un peu plus compliqué l'insertion d'un nouvel enregistrement: je dois d'abord retirer le drapeau "ISLATESTRECORD" du dernier enregistrement, je dois insérer le nouvel enregistrement d'historique avec l'ensemble "ISLATESTRECORD" et valider la transaction.
Selon vous, quelle est la solution recommandée? Je n'ai pas la moindre idée de l'impact sur les performances des sous-sélections: Je pourrais avoir des millions de « MasterTable » Records « que je dois rechercher un enregistrement spécifique en utilisant également les attributs de recherche de la table d'historique rejoint comme: » Donne-moi la L'enregistrement de table principale avec FIRSTNAME XYZ et LASTACTION (de la table d'historique) était "changed_name". Donc, cette sous-sélection pourrait être appelée des millions de fois.
Ou est-il préférable de travailler avec un sous-ensemble pour trouver le dernier enregistrement, étant donné que les sous-sélectifs sont très efficaces et qu'il est préférable de tout normaliser?
Merci beaucoup
Qu'est-ce que la base de données (y compris. version)? –