Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пейджинг на больших объёмах данных / 13 сообщений из 13, страница 1 из 1
07.02.2010, 15:31:39
    #36454121
c-project
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
Здравствуйте.

У меня возникла ситуация:
Есть некая таблица с пейджингом.
Для выборки используется фильтрация по полям.
Записей в базе десятки милионов.

Проблема в том что при обычной схеме пейджинга (2 запроса: count(*) и запрос данных) на таких объёмах данных тормозит.
При этом второй запрос естественно ограничен количеством записей отображаемых на странице (например 25).
Но запрос общего количества естественно без этого ограничения, но с фильтрацией.
Объёмы огромные а пейджинг нужен. как выкрутиться?

здесь нужно применить математику, но каким боком не понимаю.
как расчитать номер страницы, и есть ли страницы до и после если не знать общего количества записей в выборке?
...
Рейтинг: 0 / 0
07.02.2010, 17:13:40
    #36454199
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
c-project,

На разных серверах БД, например MS SQL (даже 2000 от 2005 отличается), MySQL пейжинг по разному реализован. У Вас что?
...
Рейтинг: 0 / 0
07.02.2010, 17:53:29
    #36454233
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
c-project,

AFAIK, никак. Достаточно легко можно узнать, есть ли следующая и есть ли предыдущая страница. Если нужно узнать количество страниц и номер текущей, без COUNT в той или иной форме (например, в MySQL SQL_CALC_FOUND_ROWS - правда иногда работает даже медленнее отдельного запрос) не обойтись.
...
Рейтинг: 0 / 0
07.02.2010, 18:33:30
    #36454252
c-project
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
ShSerge,

в моём случае db2 v8.

да. на самом деле без COUNT как не крути не обойтись.
хотя можно этот фрагмент оптимизировать. Например после поиска с фильтрацией положить во временную таблицу, потом по ней посчитать COUNT и сделать выборку с ограничением. Но это спорно и нужно тестировать, т.к. может оказаться что пользователь не указал фильтры и тогда вся таблица целиком будет копироваться во временную.

У меня уже спортивный интерес. Даже если я откажусь от такого пейджинга в этой системе, поэксперементировать интересно.
...
Рейтинг: 0 / 0
07.02.2010, 22:50:57
    #36454467
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
а слабо на триггерах количество считать?
...
Рейтинг: 0 / 0
07.02.2010, 22:52:14
    #36454470
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
да и вообще когда больше трех страниц можно количество не выводить. ибо все равно никто столько смотреть не будет.
...
Рейтинг: 0 / 0
07.02.2010, 23:17:33
    #36454494
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
ScareCrow,

читайте внимательно, фильтрация произвольная - 1 поле с 2 DISTINCT значениями - 2 предрасчета, 2 поля каждое с 2 DISTINCT значениями = 2 * 2 предрасчета. И так далее. В итоге получится, что на один INSERT придется предрассчитывать сотни COUNTов.
...
Рейтинг: 0 / 0
07.02.2010, 23:39:21
    #36454517
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
c-project,

Пардон, на DB2 я - не джедай. Хотя не сомневаюсь, что там есть средства не хуже, чем в MS SQL или MySQL.
ПС. COUNT(*) здесь не при чём. Имеются во всех (которые я знаю) БД специальные средства для пейжинга. Кстати, COUNT(*) выполняется мгновенно, независимо сколько десятков миллионов записей.
...
Рейтинг: 0 / 0
08.02.2010, 00:41:36
    #36454549
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
ShSerge,

если имеется в виду SQL_CALC_FOUND_ROWS в MySQL и аналоги в других БД, то оно работает не всегда быстрее COUNT(*) отдельным запросом, а иногда даже медленее. И COUNT(*) не всегда отрабатывает мгновенно - вы, наверное, распространяете случай выборки SELECT COUNT(*) FROM t в MySQL над MyISAM таблицей, где количество записей берется напрямую из информации о таблице, а не подсчитывается - с тем же InnoDB такой финт уже не получится. Как минимум в MS SQL и Oracle ситуация, AFAIK, обстоит не лучше.
...
Рейтинг: 0 / 0
08.02.2010, 08:30:25
    #36454641
Диез
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
ShSerge
...
Кстати, COUNT(*) выполняется мгновенно, независимо сколько десятков миллионов записей.

На произвольном запросе? Это вы погорячились, погорячились...
...
Рейтинг: 0 / 0
08.02.2010, 09:49:20
    #36454710
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
а зачем тебе такие объемы на клиенте нужны?
...
Рейтинг: 0 / 0
10.02.2010, 08:23:55
    #36459285
c-project
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
MasterZivа зачем тебе такие объемы на клиенте нужны?
Нет. такие объёмы мне на клиенте не нужны. Для ограничения есть фильтры, которые указывает пользователь. Но он может указать их мало. В итоге результат сожет быть огромным, поэтому есть пейджинг. и на клиента загружается только одна страница, а не все.
...
Рейтинг: 0 / 0
10.02.2010, 18:36:39
    #36461529
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пейджинг на больших объёмах данных
c-project wrote:

> Нет. такие объёмы мне на клиенте не нужны. Для ограничения есть фильтры,
> которые указывает пользователь. Но он может указать их мало. В итоге
> результат сожет быть огромным, поэтому есть пейджинг. и на клиента
> загружается только одна страница, а не все.

Так ПОЭТАПНО он будет загружать ВСЁ.
А если не будет, то это всё равно, что выдать первые N (N~=100)
записей и сказать, что "вообще-то их дофига", или "есть и ещё
такие записи".

Я вот не понимаю, на кой фиг этот пейджинг...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пейджинг на больших объёмах данных / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]