Оптимизация CPagination

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
hip_
Сообщения: 9
Зарегистрирован: 2011.12.09, 18:23

Оптимизация CPagination

Сообщение hip_ »

Доброго дня,
кто-то из опытных девелоперов наверняка сталкивался, подскажите плиз куда копать.

При пагинации CPagination, чем дальше ухожу по страницам, тем дольше выполняется запрос, вот к примеру на 1000-й странице (а это далеко не последняя) время выполнения 0.72 сек, при этом на первой без оффсета всего лишь 0.0012

Запрос генерируется простой:
SELECT t.name, t.weight FROM `terms` `t` ORDER BY weight DESC LIMIT 50 OFFSET 49950

Как правильно поступить? возможно стоит выбрать и закешировать всю таблицу а потом работать с ней не обращаясь к базе, но смущает объем кешируемой информации, неужели это будет правильный вариант?
Аватара пользователя
andy_s
Сообщения: 127
Зарегистрирован: 2012.01.22, 13:15

Re: Оптимизация CPagination

Сообщение andy_s »

В этом нет ничего удивительного, СУБД каждый раз отсчитывает 50000 строк, чтобы добраться до нужной. Вот интересная статья, в конце есть запрос, который вроде как заметно улучшает ситуацию: http://explainextended.com/2009/10/23/m ... w-lookups/
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Оптимизация CPagination

Сообщение TM123 »

А у вас индекс по weight имеется?
Вообще время конечно может расти, все таки чем дальше по индексу, тем больше нужно пролистать страниц этого самого индекса для того чтобы найти нужное, но это должны быть всего проценты, а не сотни раз.
Аватара пользователя
hip_
Сообщения: 9
Зарегистрирован: 2011.12.09, 18:23

Re: Оптимизация CPagination

Сообщение hip_ »

По weight индекс, конечно, имеется.

Пока решила данную проблему, путем изменения условия CPagination на

Код: Выделить всё

SELECT t.id, t.name, t.weight FROM `terms` `t` WHERE(t.id>49950) ORDER BY weight DESC LIMIT 50
В результате запрос вместо 0.72 сек выполняется за 0.01
Других вариантов пока не нашлось
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Оптимизация CPagination

Сообщение TM123 »

Я вам такой вариант хотел посоветовать, но он не всегда подходит.

Вообще то что описано по ссылке весьма забавно, если все это правда и автор статьи нигде не ошибся - это это просто мегакривизна в определении индексов мускулом. Будет время проверю это дело.
Ответить