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

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

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

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

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

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

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

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

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

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

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

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

На произвольном запросе? Это вы погорячились, погорячились...
...
Рейтинг: 0 / 0
Пейджинг на больших объёмах данных
    #36454710
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем тебе такие объемы на клиенте нужны?
...
Рейтинг: 0 / 0
Пейджинг на больших объёмах данных
    #36459285
c-project
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivа зачем тебе такие объемы на клиенте нужны?
Нет. такие объёмы мне на клиенте не нужны. Для ограничения есть фильтры, которые указывает пользователь. Но он может указать их мало. В итоге результат сожет быть огромным, поэтому есть пейджинг. и на клиента загружается только одна страница, а не все.
...
Рейтинг: 0 / 0
Пейджинг на больших объёмах данных
    #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]