XF 2.2 Огромный запрос к БД

Статус
В этой теме нельзя размещать новые ответы.
Версия XenForo
2.2

casinomaister

Проверенные
Сообщения
16
Реакции
0
Баллы
1,698
Привет помогите пожалуйста разобраться.
Огромный запрос, вывод картинок с темы под id 133
выводит последние 10 картинок из темы, в теме 25к постов
как решить это?

Код:
SELECT `xf_post`.*
FROM `xf_post`

WHERE (`xf_post`.`thread_id` = '133')
Run Time: 2.762808
Select Type    Table    Type    Possible Keys    Key    Key Len    Ref    Rows    Extra
SIMPLE    xf_post    ALL    thread_id_post_date,thread_id_position,thread_id_score_date                   1    Using where

XF\Db\Mysqli\Statement->execute() in src/XF/Db/AbstractAdapter.php at line 96
XF\Db\AbstractAdapter->query() in src/XF/Mvc/Entity/Finder.php at line 1387
XF\Mvc\Entity\Finder->fetch() in src/addons/KST/Slider/XF/Pub/Controller/Forum.php at line 18
KST\Slider\XF\Pub\Controller\Forum->actionList() in src/XF/Mvc/Dispatcher.php at line 352
XF\Mvc\Dispatcher->dispatchClass() in src/XF/Mvc/Dispatcher.php at line 259
XF\Mvc\Dispatcher->dispatchFromMatch() in src/XF/Mvc/Dispatcher.php at line 115
XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 57
XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2351
XF\App->run() in src/XF.php at line 517
XF::runApp() in index.php at line 20
SELECT `xf_attachment`.*, `xf_attachment_data_Data_1`.*
FROM `xf_attachment`
INNER JOIN `xf_attachment_data` AS `xf_attachment_data_Data_1` ON (`xf_attachment_data_Data_1`.`data_id` = `xf_attachment`.`data_id`)
WHERE (`xf_attachment`.`content_id` IN (215294, 215302, 215348, 215368, + еще 25к позиций )) AND (`xf_attachment`.`content_type` = 'post') AND (`xf_attachment_data_Data_1`.`width` != '0')
ORDER BY `xf_attachment`.`content_id` DESC

LIMIT 10
 
Последнее редактирование:
West14, Не подскажешь? Колян пропал с декабря ?

Код:
<?php

namespace KST\Slider\XF\Pub\Controller;

use XF\Mvc\ParameterBag;

class Forum extends XFCP_Forum
{

    public function actionList(ParameterBag $params)
    {
        $response = parent::actionList($params);
        $options = \XF::options();
        $threadId = $options->ThreadIDSlider;
        
        $thread = \XF::finder('XF:Thread')->where('thread_id', $threadId)->fetchOne();
    
        $posts = \XF::finder('XF:Post')->where('thread_id', $threadId)->fetch();
        $postsId = array();
        
        foreach($posts as $post)
        {
            $postsId[] = $post['post_id'];
        }
        
        $attachments = \XF::finder('XF:Attachment')->with('Data', true)->where('content_id', $postsId)->where('content_type', 'post')->where('Data.width', '!=', '0')->limit($options->ImgSliderLimit)->order('content_id', 'DESC')->fetch();
    
        if ($response instanceof \XF\Mvc\Reply\View)
        {
                                        
            $response->setParam('Slider', $attachments);
            $response->setParam('thread', $thread);
                
        }
        return $response;
        
    }

}
 
$posts = \XF::finder('XF:Post')->where('thread_id', $threadId)->fetch();
заменить на

PHP:
$posts = \XF::finder('XF:Post')
    ->where([
        ['thread_id', $threadId],
        ['attach_count', '>', 0]
    ])->fetch();

Должно отсеять посты, у которых нет аттачей и снизить кол-во элементов.
В целом, вовсе не решение, тут стоило бы вводить какой-то кеш, но это уже выходит за рамки "быстрого фикса".
 
$posts = \XF::finder('XF:Post')->where('thread_id', $threadId)->fetch();
заменить на

PHP:
$posts = \XF::finder('XF:Post')
    ->where([
        ['thread_id', $threadId],
        ['attach_count', '>', 0]
    ])->fetch();

Должно отсеять посты, у которых нет аттачей и снизить кол-во элементов.
В целом, вовсе не решение, тут стоило бы вводить какой-то кеш, но это уже выходит за рамки "быстрого фикса".
1 запрос прошел хорошо (темерь лимит около 100штук), а вот почему то еще один

Код:
SELECT `xf_post`.*
FROM `xf_post`

WHERE (`xf_post`.`thread_id` = '4283')
Run Time: 3.781462
Select Type    Table    Type    Possible Keys    Key    Key Len    Ref    Rows    Extra
SIMPLE    xf_post    ALL    thread_id_post_date,thread_id_position,thread_id_score_date                   2    Using where

XF\Db\Mysqli\Statement->execute() in src/XF/Db/AbstractAdapter.php at line 96
XF\Db\AbstractAdapter->query() in src/XF/Mvc/Entity/Finder.php at line 1387
XF\Mvc\Entity\Finder->fetch() in src/addons/KST/Slider/Widget/Slider.php at line 17
KST\Slider\Widget\Slider->render() in internal_data/code_cache/widgets/_13_zanosi.php at line 5
XF\SubContainer\Widget->{closure}() in src/XF/Template/Templater.php at line 7518
XF\Template\Templater->renderWidgetClosure() in src/XF/SubContainer/Widget.php at line 168
XF\SubContainer\Widget->getCompiledWidget() in src/XF/Template/Templater.php at line 1928
XF\Template\Templater->widgetPosition() in internal_data/code_cache/templates/l2/s2/public/forum_list.php at line 219
XF\Template\Templater->{closure}() in src/XF/Template/Templater.php at line 1651
XF\Template\Templater->renderTemplate() in src/XF/Template/Template.php at line 24
XF\Template\Template->render() in src/XF/Mvc/Renderer/Html.php at line 50
XF\Mvc\Renderer\Html->renderView() in src/XF/Mvc/Dispatcher.php at line 460
XF\Mvc\Dispatcher->renderView() in src/XF/Mvc/Dispatcher.php at line 442
XF\Mvc\Dispatcher->renderReply() in src/XF/Mvc/Dispatcher.php at line 402
XF\Mvc\Dispatcher->render() in src/XF/Mvc/Dispatcher.php at line 60
XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2351
XF\App->run() in src/XF.php at line 517
XF::runApp() in index.php at line 20
SELECT `xf_attachment`.*, `xf_attachment_data_Data_1`.*
FROM `xf_attachment`
INNER JOIN `xf_attachment_data` AS `xf_attachment_data_Data_1` ON (`xf_attachment_data_Data_1`.`data_id` = `xf_attachment`.`data_id`)
WHERE (`xf_attachment`.`content_id` IN (215294, 215302, 215348, 215368, 215391, 215393, 215421, 264376 И ТАК ДАЛЕЕ 10К ШТУК)) AND (`xf_attachment`.`content_type` = 'post') AND (`xf_attachment_data_Data_1`.`width` != '0')
ORDER BY `xf_attachment`.`content_id` DESC
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу