Joomla медленный запрос - PullRequest
       2

Joomla медленный запрос

2 голосов
/ 13 сентября 2011

У меня есть Joomla с около 4k статей. Запросы выполняются очень медленно. ниже приведен один медленный журнал запросов MySQL.

# Query_time: 8.906729  Lock_time: 0.000470 Rows_sent: 4  Rows_examined: 5110986
SET timestamp=1315935450;
SELECT a.id, a.title, a.alias, a.title_alias, a.introtext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias, CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, a.modified_by, uam.name as modified_by_name,CASE WHEN a.publish_up = 0 THEN a.created ELSE a.publish_up END as publish_up, a.publish_down, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, LENGTH(a.fulltext) AS readmore ,CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state,c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias,CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author,ua.email AS author_email,contact.id as contactid,parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias,ROUND( v.rating_sum / v.rating_count ) AS rating, v.rating_count as rating_count,c.published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published
FROM ql8wt_content AS a
LEFT JOIN ql8wt_categories AS c ON c.id = a.catid
LEFT JOIN ql8wt_users AS ua ON ua.id = a.created_by
LEFT JOIN ql8wt_users AS uam ON uam.id = a.modified_by
LEFT JOIN ql8wt_contact_details AS contact on contact.user_id = a.created_by
LEFT JOIN ql8wt_categories as parent ON parent.id = c.parent_id
LEFT JOIN ql8wt_content_rating AS v ON a.id = v.content_id
LEFT OUTER JOIN (SELECT cat.id as id FROM ql8wt_categories AS cat JOIN ql8wt_categories AS parent ON cat.lft BETWEEN parent.lft AND parent.rgt WHERE parent.extension = 'com_content' AND parent.published != 1 GROUP BY cat.id ) AS badcats ON badcats.id = c.id
INNER JOIN ql8wt_content_frontpage AS fp ON fp.content_id = a.id
WHERE a.access IN (1,1) AND CASE WHEN badcats.id is null THEN a.state ELSE 0 END = 1 AND (a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2011-09-13 17:37:21') AND (a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2011-09-13 17:37:21')

Как я могу это исправить?

Как получить больше ресурсов процессора на хостинге?

Увеличение памяти mysql (использование памяти моего хостинга никогда не превышает 10%)? Я уже увеличил лимит памяти кеша mysql.

Что я должен попытаться исправить?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

На самом деле очень сложно что-то сказать, имея так мало информации, но, по крайней мере, вы можете переписать свое неэффективное предложение WHERE в следующий эквивалент:

WHERE 
    a.access IN (1,1) AND 
    badcats.id IS NULL AND
    a.state = 1 AND
    a.publish_up <= '2011-09-13 17:37:21' AND 
    (a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2011-09-13 17:37:21')
0 голосов
/ 13 февраля 2014

Модель Joomla не очень хорошо работает с тысячами статей.

Модели очень универсальны и предназначены для использования в большинстве случаев; хотя он работает на больших сайтах, он определенно может использовать некоторые улучшения.

  1. Использовать плагин системного кэша
  2. увеличить время кеширования
  3. Переписать медленные запросы (особенно в модуле связанных статей, последних статьях и т. Д.), Извлекая только ту информацию, которая вам требуется
  4. Переключитесь на полнотекстовый поиск и отбросьте все операторы like '%$var%'
  5. Используйте лак для более быстрого кэширования перед Joomla

Первые 4 действия увеличили время отклика с 1+ секунд до 100 - 150 мс. Последнее нелегко, но позволит вам получить 10-15 мс на страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...