These queries need to get rewritten:
Code:
mysql> explain SELECT a.id, a.title, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.attribs, a.urls, a.metakey, a.metadesc, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(':', a.id, a.alias) ELSE a.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug, CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, g.name AS groups, cc.title AS category, s.title AS section, s.ordering AS s_ordering, cc.ordering AS cc_ordering, a.ordering AS a_ordering, f.ordering AS f_ordering FROM jos_content AS a INNER JOIN jos_content_frontpage AS f ON f.content_id = a.id LEFT JOIN jos_categories AS cc ON cc.id = a.catid LEFT JOIN jos_sections AS s ON s.id = a.sectionid LEFT JOIN jos_users AS u ON u.id = a.created_by LEFT JOIN jos_groups AS g ON a.access = g.id WHERE 1 AND a.access <= 2 AND a.state >= 0 ORDER BY f.ordering LIMIT 0, 21;
+----+-------------+-------+--------+------------------------------+---------+---------+------------------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+------------------------------+---------+---------+------------------+------+----------------+
| 1 | SIMPLE | f | ALL | PRIMARY | NULL | NULL | NULL | 1029 | Using filesort |
| 1 | SIMPLE | a | eq_ref | PRIMARY,idx_access,idx_state | PRIMARY | 4 | j15.f.content_id | 1 | Using where |
| 1 | SIMPLE | cc | eq_ref | PRIMARY | PRIMARY | 4 | j15.a.catid | 1 | |
| 1 | SIMPLE | s | eq_ref | PRIMARY | PRIMARY | 4 | j15.a.sectionid | 1 | |
| 1 | SIMPLE | u | eq_ref | PRIMARY | PRIMARY | 4 | j15.a.created_by | 1 | |
| 1 | SIMPLE | g | eq_ref | PRIMARY | PRIMARY | 1 | j15.a.access | 1 | |
+----+-------------+-------+--------+------------------------------+---------+---------+------------------+------+----------------+
Code:
mysql> explain SELECT a.id, a.title, a.title_alias, a.introtext, a.fulltext, a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by, a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.images, a.attribs, a.urls, a.metakey, a.metadesc, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(':', a.id, a.alias) ELSE a.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug, CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, g.name AS groups, cc.title AS category, s.title AS section, s.ordering AS s_ordering, cc.ordering AS cc_ordering, a.ordering AS a_ordering, f.ordering AS f_ordering FROM jos_content AS a INNER JOIN jos_content_frontpage AS f ON f.content_id = a.id LEFT JOIN jos_categories AS cc ON cc.id = a.catid LEFT JOIN jos_sections AS s ON s.id = a.sectionid LEFT JOIN jos_users AS u ON u.id = a.created_by LEFT JOIN jos_groups AS g ON a.access = g.id WHERE 1 AND a.access <= 2 AND a.state >= 0 ORDER BY f.ordering;
+----+-------------+-------+--------+------------------------------+---------+---------+------------------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+------------------------------+---------+---------+------------------+------+----------------+
| 1 | SIMPLE | f | ALL | PRIMARY | NULL | NULL | NULL | 1029 | Using filesort |
| 1 | SIMPLE | a | eq_ref | PRIMARY,idx_access,idx_state | PRIMARY | 4 | j15.f.content_id | 1 | Using where |
| 1 | SIMPLE | cc | eq_ref | PRIMARY | PRIMARY | 4 | j15.a.catid | 1 | |
| 1 | SIMPLE | s | eq_ref | PRIMARY | PRIMARY | 4 | j15.a.sectionid | 1 | |
| 1 | SIMPLE | u | eq_ref | PRIMARY | PRIMARY | 4 | j15.a.created_by | 1 | |
| 1 | SIMPLE | g | eq_ref | PRIMARY | PRIMARY | 1 | j15.a.access | 1 | |
+----+-------------+-------+--------+------------------------------+---------+---------+------------------+------+----------------+
The second one needs a limit because it says (with my data):
Rows_sent: 982 and I don't think those rows are used, but I could be wrong on this one. Obviously, index on
jos_content_frontpage.ordering is needed for
order by.