Le souci vient d'une double jointure, que j'ai involontairement introduite précédemment pour masquer les étiquettes masquées et les étiquettes des contenus masqués.
commit 340eacd82cf82b9bffc089ad5c02383dadd76a71
Author: Benoît Sibaud <oumph@linuxfr.org>
Date: Wed Nov 21 20:47:14 2018 +0100
Popular tags based only on public nodes
diff --git a/app/models/tag.rb b/app/models/tag.rbindex dc97553d..39f31643 100644--- a/app/models/tag.rb+++ b/app/models/tag.rb@@ -20,8 +20,10 @@ class Tag < ActiveRecord::Base
scope :footer, -> {
select([:name]).joins(:taggings).
where(public: true).
- where("created_at > ?", 1.month.ago).- group(:tag_id).+ joins(:nodes).+ where("nodes.public = 1").+ where("taggings.created_at > ?", 1.month.ago).+ group("taggings.tag_id").
order(Arel.sql("COUNT(*) DESC")).
limit(12)
}
(:nodes contient déjà une jointure via taggings, donc on fait une double jointure via taggings, et dès qu'il y a beaucoup d'étiquetages, le résultat est monstrueux... exemple: "43454465 rows in set (1 min 41.74 sec)" avec un essai d'insertion de 6500 étiquetages...)
# Double jointure de la mort
Posté par Benoît Sibaud (site web personnel) . En réponse à l’entrée du suivi Étiquettes populaires et performances. Évalué à 3 (+0/-0).
Le souci vient d'une double jointure, que j'ai involontairement introduite précédemment pour masquer les étiquettes masquées et les étiquettes des contenus masqués.
(:nodes contient déjà une jointure via taggings, donc on fait une double jointure via taggings, et dès qu'il y a beaucoup d'étiquetages, le résultat est monstrueux... exemple: "43454465 rows in set (1 min 41.74 sec)" avec un essai d'insertion de 6500 étiquetages...)
Une correction serait :