Оптимизация запроса

nail

Новичок
... расскажешь потом, насколько эффективно на практике работает

В любом случае настраивайся заранее, что структуру таблиц и выборки придется переделывать со временем :)
 

Wicked

Новичок
В итоге переделал на использование метода дихотомии, а не хорд.

Если кому интересны попугаи с виртуальной машины, то для пользователя с 250к постами оригинальный запрос работал 280 секунд.
А "добыча" 14ю итерациями на только что перезапущенной мусе (чтобы убить кэши и буферы) десяти айдишников записей - 6 секунд. Добыча для второй страницы - 0.2 сек (за счет query cache - итерации очень хорошо кэшируются).

-~{}~ 20.02.08 22:45:

теперь про постгрес...

на оригинальном запросе он читерит :)
для первых ~10 страниц (по 10 записей) он использует backward index scan, т.е. использует сортировку по pub_date, жертвуя тем, что придется отбрасывать много мусора: посты из фидов, на которые пользователь не подписан. При этом работает довольно быстро (0.1 .. 1 сек). Но уже к 20й странице все встает на свои места, и он показывает тот же файлсорт (таблица на 300мбайт), что и муся, и, соответственно, сопоставимое время - 240 секунд. Со временем возможность backward index scan'а будет только падать, потому что кол-во фидов будет, вероятно расти быстрее, чем кол-во фидов, на которые подписан какой-то отдельно взятый пользователь, и, соответстенно, мусора тоже будет все больше и больше...

Теперь осталось начать у него runtime выпытывать, будет ли он справляться быстро с этим запросом, и, соответственно, исполнять либо его в лоб, либо, в обратном случае, пользоваться моим алгоритмом :)
 

Centaur

Новичок
Запускать оба метода в параллель и, когда один завершится, второй прибивать? :)

Also, есть подозрение, что чтение ленты skip=800 — случай пренебрежимо редкий.
 

Wicked

Новичок
типа "у нас вы можете просмотреть только первые 10 страниц?" :))
 

Centaur

Новичок
Пренебрежимо не настолько, чтобы запрещать, а чтобы не заморачиваться над регулярностью. Например, показывать 10 страниц по 15 записей, а дальше — календарь. По типу того, что на blogs.msdn.com:
* February 2008 (25)
* January 2008 (35)
* December 2007 (36)
* November 2007 (30)
* October 2007 (33)
* September 2007 (36)
* August 2007 (45)
* July 2007 (43)
 
Сверху