@edogs Еее!!! Да чувак, да! Спасибо, я вообще убрал сортировку, запрос выполняется за 0.00000, в конце концов, кто там разглядит на 100х60 пикселях новое это изображение, или нет.
Вопрос закрыт, тебе за проявленный интерес, и за то, что подталкнул на мысль, огромное спасибо!
Вообще странно, что сортировка по индексу, производила такие тормоза...
@edogs Ну так мне это и нужно, в этом плане, всё рабтает верно, я же не написал что я полный дуб в бд...
Сейчас вообще запрос выглядит так: $qb->select('count(a.id)')->alias('count')
->select('a.small', 'b.id', 'b.url', 'b.name')
->from('#__games_images')->alias('a')
->leftJoin('#__games')->alias('b')
->on('a.game', '=', 'b.id')
->on('b.published', '=', '1')
->order('a.create')->desc()
->group('a.game')->desc()
->limit(5);
И сортировка работает так, как мне и нужно... И от неё ни чего не зависит, в плане скорости...
@edogs Вы не правильно прочитали мой вопрос, в том то и дело, что картинок в 10 раз больше чем игр.
2. В таблице #__games_images находится ~ 100 000 записей...
3. В таблице #__games находится примерно ~ 20 000 записей...
Ну ладно, не в 10 а в 5...
По третьему пункту мы не поймёт друг друга... Я храню 2 имени изображения, оригинальное и сжатое, они одинаковые, только размеры разные, small это копия оригинала размером 300х300, далее при вызове на сервере я его сжимаю на лету, допустим small.100x75.jpeg но это другая история, а по делу, у игры и так есть своя картинка записанная в поле у таблицы с играми, но там не скриншот а ART BOX...
@arvitaly И да, запрос в запросе, как альтернатива group by... По моему не самое удачное решение, если брать в расчёт тот факт, что кол-во записей в таблицах измеряется тысячами...
+1 за идею подсчёта, но это я и так понимаю, другое дело, что хотелось бы иметь максимально оптимизированный запрос, а по хорошему, по моему мнению, в модели должно быть кеширование, скажем на сутки, по сути мы и получим тоже, что вы и предложили, только более правильное решение, опять же на мой взгляд...
1. join перевернуть по таблицам не выйдет, т.к. не у всех игр есть картинки.
2. Кол-во игр хранить в поле, идея неплохая, но накладная, в модели, во многих местах, придётся делать перерасчеты, и прочие действия...
3. Поле small в картинках, не может быть у игры в поле, у игры есть отдельное поле, в котором находится box art...
Ещё раз повторюсь, что логика запроса совершенно правильная.
@Fesor если left join заменить на inner join скорость выполнения запроса увеличивается в 5 раз.
Индексы все проставлены, комбинированные индексы не помогают, в вопросе я обновил информацию, по поводу группировки...
group by для поля a.game, мне необходимо для того, чтобы получить 1 последнюю картинку к игре, иначе я получу 5 картинок к одной и той же игре.
count() мне необходимо для того, чтобы узнать вообще кол-во картинок к этой игре (что в свою очередь на скорость запроса не влияет вообще).
Логика запроса другая:
У игры есть изображения, я обращаюсь именно к изображениям, они или есть, или их нету.
Группирую я их, для получения кол-ва изображений у игры...
Сортирую я их по дате добавления, она же является индексом...
Т.е. с логикой то всё в порядке, а вот со скоростью нет...
@artem_gurnovich Я просто привык что это ОС для домашнего использования, и склонен больше к Debian...
По всему остальному я ответил, единственное могу добавить, у вас единственный вариант теперь, это пункт номер 2...
@bossldv Эммм, какая версия PHP? Я знаю что в php.ini можно настроить так, чтобы <? - не работало, но чтобы <?php - не работало... Чудеса, редактор какой? Кодировка? Явно довольно таки тривиальная ошибка...
Вопрос закрыт, тебе за проявленный интерес, и за то, что подталкнул на мысль, огромное спасибо!
Вообще странно, что сортировка по индексу, производила такие тормоза...