Bonjour,
À titre « ludique », je souhaite lancer une requête affichant le classement des statistiques des commentaires postés sur un blog Wordpress au cours des six derniers mois.
À ce jour, j'ai cette requête, particulièrement sous-optimisée :
Il faut environ 5 secondes pour renvoyer une quinzaine de lignes et il y a moins de 1500 lignes dans la table wp_comments.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT wc1.comment_author AS AUTHOR, count(*) AS COUNT_AUTHOR, (count(*)/(SELECT count(*) FROM wp_comments))*100 AS RATE, MAX(wc1.comment_date) AS LAST_RAW, DATE_FORMAT(MAX(wc1.comment_date), '%d/%m/%Y') AS LAST FROM wp_comments as wc1 WHERE wc1.comment_author IN ( SELECT comment_author FROM wp_comments AS wc2 WHERE wc2.comment_date >= DATE_ADD(NOW(), INTERVAL -6 MONTH) ) GROUP BY AUTHOR ORDER BY COUNT_AUTHOR DESC, LAST_RAW DESC
J'ai bien regardé les transformations usuelles de SQLPro (http://sqlpro.developpez.com/cours/optimiser/#L9), mais je n'arrive pas à lier les deux exemples fournis à mon cas.
Pour commencer, est-il possible de dé-corréler cette requête ?
Et si oui, quelle est la marche à suivre pour y parvenir ?
À titre indicatif pour les non-habitués de Wordpress, la structure de la table :
Merci d'avance et bon week-end !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 CREATE TABLE `wp_comments` ( `comment_ID` bigint(20) unsigned NOT NULL auto_increment, `comment_post_ID` bigint(20) unsigned NOT NULL default '0', `comment_author` tinytext NOT NULL, `comment_author_email` varchar(100) NOT NULL default '', `comment_author_url` varchar(200) NOT NULL default '', `comment_author_IP` varchar(100) NOT NULL default '', `comment_date` datetime NOT NULL default '0000-00-00 00:00:00', `comment_date_gmt` datetime NOT NULL default '0000-00-00 00:00:00', `comment_content` text NOT NULL, `comment_karma` int(11) NOT NULL default '0', `comment_approved` varchar(20) NOT NULL default '1', `comment_agent` varchar(255) NOT NULL default '', `comment_type` varchar(20) NOT NULL default '', `comment_parent` bigint(20) unsigned NOT NULL default '0', `user_id` bigint(20) unsigned NOT NULL default '0', PRIMARY KEY (`comment_ID`), KEY `comment_approved` (`comment_approved`), KEY `comment_post_ID` (`comment_post_ID`), KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), KEY `comment_date_gmt` (`comment_date_gmt`) );
Alban
Partager