marienfressinaud/FreshRSS — pull request #180 by Alkarex (2013-10-12 22:28:59+00:00)
Title: Optimisation SQL, deuxième vague

Réduction du nombre de requêtes SQL.

Corrige le problème de performance de https://github.com/marienfressinaud/FreshRSS/commit/b0809fcf5eec9d19f335bbed57102beadefba276#commitcomment-4316586

Utilisation d'une seule connexion SQL plutôt que 3 précédemment, en partageant la connexion entre les plusieurs classes DAO (de toute manière, les requêtes sont faites en série et pas en parallèle).

Il reste encore deux ou trois requêtes COUNT(*) superflues (dont une en cache), mais l'essentiel est fait.

Voilà les requêtes nécessaires au chargement de la page d'accueil (contre une par flux et par catégorie auparavant plus quelques autres, ainsi que deux connexions inutiles) :

````
131013 0:08:22 87521 Connect root@localhost on freshrss
87521 Query SET NAMES utf8
87521 Query SELECT is_read, COUNT(*) AS count FROM freshrss_entry e INNER JOIN freshrss_feed f ON e.id_feed = f.id WHERE priority > 0 GROUP BY is_read
87521 Query SELECT c.id AS c_id, c.name AS c_name, c.color AS c_color,
COUNT(CASE WHEN e.is_read = 0 THEN 1 END) AS nbNotRead, COUNT(e.id) AS nbEntries, f.*
FROM freshrss_category c LEFT OUTER JOIN freshrss_feed f ON f.category = c.id LEFT OUTER JOIN freshrss_entry e ON e.id_feed = f.id
GROUP BY f.id ORDER BY c.name, f.name
87521 Query SELECT is_read, COUNT(*) AS count FROM freshrss_entry WHERE is_favorite=1 GROUP BY is_read
87521 Query SELECT is_read, COUNT(*) AS count FROM freshrss_entry e INNER JOIN freshrss_feed f ON e.id_feed = f.id WHERE priority > 0 GROUP BY is_read
87521 Query SELECT e.* FROM freshrss_entry e INNER JOIN freshrss_feed f ON e.id_feed = f.id WHERE priority > 0 AND is_read = 0 ORDER BY e.date DESC, e.id DESC LIMIT 50
87521 Quit
```