Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Сортировка данных из БД


Автор: Artemij 28.4.2009, 01:00
Имеем:

3 database tables: user, text, friend

user: логин пользователя, пароль пользователя, и любая другая информация.

text: логин пользователя (автор текста), текст, дата/время, и любая другая информация.

friend: логин пользователя, логин пользователя с которым он дружит, и любая другая информация.

Задача:

Показать 10 самых свежих текстов от всех друзей пользователя (не от каждого по 10, а 10 всего от всех, отсортировав по дате ).

Вопрос: 

1) Как решить в пределах O( nlogn )? Объём данных 200 000 пользователей, в среднем по 50 текстов на пользователя.

2) Какие дополнительные tables/columns необходимо создать, чтобы улучшить производительность?

Спасибо!

Автор: Akina 28.4.2009, 08:05
Цитата(Artemij @  28.4.2009,  02:00 Найти цитируемый пост)
Как решить в пределах O( nlogn )? 

Правильно построить индексы и, если нужно, принудительно сделать так, чтобы они использовались при выборке данных.

Цитата(Artemij @  28.4.2009,  02:00 Найти цитируемый пост)
Какие дополнительные tables/columns необходимо создать, чтобы улучшить производительность?

Уйти от связи по текстовому полю к связи по счётчику/длинному целому.

Автор: Artemij 28.4.2009, 21:07
Цитата(Akina @ 28.4.2009,  08:05)
Цитата(Artemij @  28.4.2009,  02:00 Найти цитируемый пост)
Как решить в пределах O( nlogn )? 

Правильно построить индексы и, если нужно, принудительно сделать так, чтобы они использовались при выборке данных.

Цитата(Artemij @  28.4.2009,  02:00 Найти цитируемый пост)
Какие дополнительные tables/columns необходимо создать, чтобы улучшить производительность?

Уйти от связи по текстовому полю к связи по счётчику/длинному целому.

Спасибо, проблема решена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)