par
Hubert Roksor » 17 oct. 2006, 17:15
Ca fonctionne, ca me permet d'enlever de champ ajouté pour contourner le prob
Il y a une raison pour que les développeurs aient ajouté un champs "topic_last_post_id", c'est qu'il est très coûteux de calculer ce champs à la volée.
Attention aux
sous-requêtes corrélées (
correlated subqueries) elles sont très très coûteuses en terme de ressources, et d'autant plus que tu voudras probablement utiliser le résultat de cette requête pour la clause ORDER BY afin de classer les sujets par ordre de nouveauté, ce qui ôte toute chance à l'optimiseur de réécrire la requête. Au pire, si vous ne pouvez faire autrement qu'utiliser une requête corrélée, vous pouvez la transformer en
table dérivée mais là encore c'est très lent parce que le MAX() sera calculé sur l'intégralité de la table.
Dans tous les cas, je ne saurai trop te conseiller de
garder ce champ supplémentaire quelles que soient les circonstances.
Au fait, j'ai essayé de réécrire la requête ci-dessous pour donner un exemple de table dérivée mais je n'y suis pas arrivé parce que je n'ai pas trouvé la relation entre la table "a" et la table "t", je pense qu'il manque une condition de jointure non ?
[quote="LHDN92"]Ca fonctionne, ca me permet d'enlever de champ ajouté pour contourner le prob[/quote]
Il y a une raison pour que les développeurs aient ajouté un champs "topic_last_post_id", c'est qu'il est très coûteux de calculer ce champs à la volée.
Attention aux [url=http://dev.mysql.com/doc/refman/5.0/fr/correlated-subqueries.html]sous-requêtes corrélées[/url] ([url=http://dev.mysql.com/doc/refman/5.0/en/correlated-subqueries.html]correlated subqueries[/url]) elles sont très très coûteuses en terme de ressources, et d'autant plus que tu voudras probablement utiliser le résultat de cette requête pour la clause ORDER BY afin de classer les sujets par ordre de nouveauté, ce qui ôte toute chance à l'optimiseur de réécrire la requête. Au pire, si vous ne pouvez faire autrement qu'utiliser une requête corrélée, vous pouvez la transformer en [url=http://dev.mysql.com/doc/refman/5.0/fr/unnamed-views.html]table dérivée[/url] mais là encore c'est très lent parce que le MAX() sera calculé sur l'intégralité de la table.
Dans tous les cas, je ne saurai trop te conseiller de [b]garder ce champ supplémentaire quelles que soient les circonstances[/b].
Au fait, j'ai essayé de réécrire la requête ci-dessous pour donner un exemple de table dérivée mais je n'y suis pas arrivé parce que je n'ai pas trouvé la relation entre la table "a" et la table "t", je pense qu'il manque une condition de jointure non ?