[spip-dev] une requete améliorable dans inc/agenda ?

ecrire/inc/agenda.php: $result=sql_select("messages.id_message,
messages.titre, messages.texte, messages.date_heure,
messages.date_fin, messages.type", "spip_messages AS messages,
spip_auteurs_messages AS lien",
"((lien.id_auteur=$connect_id_auteur AND
lien.id_message=messages.id_message) OR messages.type='affich') AND
messages.rv='oui' AND ((messages.date_fin >= $avant OR
messages.date_heure >= $avant) AND messages.date_heure <= $apres) AND
messages.statut='publie'", "messages.date_heure, messages.date_fin,
messages.type, messages.texte, messages.titre, messages.id_message",
"messages.date_heure");

dans mysql-slow.log je vois souvent cette requête, qu'on pourrait je
pense améliorer avec un LEFT JOIN ON

-- Fil

OK compris, ce n'esst pas un souci de SPIP : le fichier a été modifié
par le webmestre, qui en a supprimé la partie

      AND lien.id_message=messages.id_message) OR messages.type='affich')

donc on lit toute la matrice de jointure, 1 million de lignes ; je
vais l'engueuler :slight_smile:

Mauvaise analyse de ma part : c'est le OR là-dessous qui provoque la
création d'une table temporaire contenant n x m lignes. C'est donc
bien la requête qu'il faut réécrire avec un LEFT JOIN, ou écrire en
deux fois (d'abord les messages liés à l'auteur, ensuite les messages
de tpe 'affich').

(lien.id_auteur=$connect_id_auteur AND
lien.id_message=messages.id_message) OR messages.type='affich')