You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There is a very unoptimized query for loading contents specially in paginated lists that use CASE in ORDER BY and also use LIMIT. On a large website and also as today lots of AI crawlers fetch website with tons of requests, It will easily cause high server load due to 3-4 secs that this query needs to be executed! Please resolve it in J6.
One example:
SELECT a.id, a.title, a.alias, a.introtext, a.fulltext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias, CASE WHEN c.published = 2 AND a.state > 0 THEN 2 WHEN c.published != 1 THEN 0 ELSE a.state END as state,CASE WHEN a.modified = '0000-00-00 00:00:00' THEN a.created ELSE a.modified END as modified, a.modified_by, uam.name as modified_by_name,CASE WHEN a.publish_up = '0000-00-00 00:00:00' THEN a.created ELSE a.publish_up END as publish_up,a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, a.language, LENGTH(a.fulltext) AS readmore, a.ordering,c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias,c.published, c.published AS parents_published, c.lft,CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author,ua.email AS author_email,parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias,COALESCE(NULLIF(ROUND(v.rating_sum / v.rating_count, 0), 0), 0) AS rating,
COALESCE(NULLIF(v.rating_count, 0), 0) as rating_count
FROM X_content AS a
LEFT JOIN X_categories AS c ON c.id = a.catid
LEFT JOIN X_users AS ua ON ua.id = a.created_by
LEFT JOIN X_users AS uam ON uam.id = a.modified_by
LEFT JOIN X_categories as parent ON parent.id = c.parent_id
LEFT JOIN X_content_rating AS v ON a.id = v.content_id
WHERE a.featured = 1 AND a.access IN (1,1,4) AND c.access IN (1,1,4) AND c.published = 1 AND a.state = 1 AND (a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2025-08-05 09:17:45') AND (a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2025-08-05 09:17:45')
ORDER BY CASE WHEN a.publish_up = '0000-00-00 00:00:00' THEN a.created ELSE a.publish_up END DESC , a.created DESC LIMIT 54270, 10
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
Hi Joomla Community,
There is a very unoptimized query for loading contents specially in paginated lists that use CASE in ORDER BY and also use LIMIT. On a large website and also as today lots of AI crawlers fetch website with tons of requests, It will easily cause high server load due to 3-4 secs that this query needs to be executed! Please resolve it in J6.
One example:
SELECT a.id, a.title, a.alias, a.introtext, a.fulltext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias, CASE WHEN c.published = 2 AND a.state > 0 THEN 2 WHEN c.published != 1 THEN 0 ELSE a.state END as state,CASE WHEN a.modified = '0000-00-00 00:00:00' THEN a.created ELSE a.modified END as modified, a.modified_by, uam.name as modified_by_name,CASE WHEN a.publish_up = '0000-00-00 00:00:00' THEN a.created ELSE a.publish_up END as publish_up,a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, a.language, LENGTH(a.fulltext) AS readmore, a.ordering,c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias,c.published, c.published AS parents_published, c.lft,CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author,ua.email AS author_email,parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias,COALESCE(NULLIF(ROUND(v.rating_sum / v.rating_count, 0), 0), 0) AS rating,
COALESCE(NULLIF(v.rating_count, 0), 0) as rating_count
FROM X_content AS a
LEFT JOIN X_categories AS c ON c.id = a.catid
LEFT JOIN X_users AS ua ON ua.id = a.created_by
LEFT JOIN X_users AS uam ON uam.id = a.modified_by
LEFT JOIN X_categories as parent ON parent.id = c.parent_id
LEFT JOIN X_content_rating AS v ON a.id = v.content_id
WHERE a.featured = 1 AND a.access IN (1,1,4) AND c.access IN (1,1,4) AND c.published = 1 AND a.state = 1 AND (a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2025-08-05 09:17:45') AND (a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2025-08-05 09:17:45')
ORDER BY CASE WHEN a.publish_up = '0000-00-00 00:00:00' THEN a.created ELSE a.publish_up END DESC , a.created DESC LIMIT 54270, 10
Beta Was this translation helpful? Give feedback.
All reactions