Optimisation des requêtes maximales de groupe sans analyse de table complète
L'inefficacité de la requête que vous avez fournie est due à l'analyse de table complète effectuée pour récupérer le maximum ID pour chaque option_id. Vous trouverez ci-dessous des stratégies pour optimiser cette requête sans de telles analyses :
Utilisation d'une table séparée :
Créez une table distincte, telle que "options", qui stocke les options_ids avec leurs identifiants maximum correspondants. Établissez une relation de clé étrangère entre les enregistrements et les options pour garantir l’intégrité. Cela permet une interrogation efficace du maximum d'ID en joignant des enregistrements sur option_id.
Sous-requêtes corrélées avec un index :
Utilisation d'une sous-requête corrélée référençant un index sur (option_id, id ) peut récupérer efficacement l'ID maximum pour chaque option_id. La sous-requête n'accédera qu'aux lignes pertinentes, éliminant ainsi le besoin d'une analyse complète de la table.
Jointures latérales :
Dans PostgreSQL 9.3 et versions ultérieures, les jointures latérales peuvent être utilisées en conjonction avec un CTE pour simuler des analyses d'index uniquement en se joignant à une sous-requête latérale qui récupère les valeurs souhaitées à partir d'un index.
Optimisation MySQL :
Fait intéressant, MySQL 5.5 peut optimiser cette requête en utilisant un index sur les enregistrements (option_id, id). Cela suggère que MySQL dispose d'un mécanisme pour optimiser le nombre maximum de requêtes par groupe avec des structures d'index spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!