Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
Реализуется постраничная навигация. Где-то на форумах читал, что при использовании OFFSET скорость заметно снижается. Пробовал 2 запроса, один из них с использованием LIMIT (выборка первых 10 записей), и с использованием LIMIT и OFFSET (выборка с 10й строки по 20ю). Так вот в первом случае запрос выполняется за 16ms, а во втором за 31ms. В 2 раза получается скорость снижается. Можно ли как-то ускорить этот процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 15:32 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
если получится, использовать для постраничного вывода не limit N offset M, а where order>M limit N ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:01 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatесли получится, использовать для постраничного вывода не limit N offset M, а where order>M limit N Нет, не получиться. Потому что id идут от 1 до N, то некоторых id нет. Ну удалялись записи. Поэтому в поле id, первая строка может иметь id = 1, а уже вторая id = 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:03 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
не рисовать полную разбивку по страницам, а рисовать только ссылку "следующая страница" с cgi-параметром min_id=123, где 123 - id последней строки показанной на текущей странице. при показе страницы делать запрос where id>$min_id limit 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:19 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatне рисовать полную разбивку по страницам, а рисовать только ссылку "следующая страница" с cgi-параметром min_id=123, где 123 - id последней строки показанной на текущей странице. при показе страницы делать запрос where id>$min_id limit 10. Нужна полная, чтобы люди знали сколько всего страниц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:21 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
now_new_userНужна полная, чтобы люди знали сколько всего страниц.и как вы узнаёте, сколько всего страниц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:34 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatnow_new_userНужна полная, чтобы люди знали сколько всего страниц.и как вы узнаёте, сколько всего страниц? Количество всех записей делим на кол-во отображаемых на странице. В чем беда-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:36 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
now_new_userпервом случае запрос выполняется за 16ms, а во втором за 31ms. В 2 раза получается скорость снижается. Можно ли как-то ускорить этот процесс? Вы чего вообще? Вы бы еще пример дали где: 31 ms и 32 ms. И сказали что первый способ работает быстрее. Никто не измеряет время на таких объемах. Плюс вы забываете о множестве внешних факторов, включая саму ОС. Если один запрос выполняется 500 ms, а второй 250 ms, то это ощутимо.. И не забывайте, что PostgreSQL сам может многое закешировать. На практике (лично у меня) OFFSET никаких сбоев в производительности не дает, в отличие LIMIT. З.Ы. А вы небось еще и с помощью pgAdmin время измеряли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:39 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
now_new_userКоличество всех записей...как узнаёте кол-во всех записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:41 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
Sishnikovnow_new_userпервом случае запрос выполняется за 16ms, а во втором за 31ms. В 2 раза получается скорость снижается. Можно ли как-то ускорить этот процесс? На практике (лично у меня) OFFSET никаких сбоев в производительности не дает, в отличие LIMIT. З.Ы. А вы небось еще и с помощью pgAdmin время измеряли? 1. Я привёл как пример. 2. Ага. pgAdmin. :) Меня больше интересует, как можно ускорить процесс. Покапайтесь по форумам и заметите, что не я один пишу, что OFFSET работает медленно. Думаю это написнао в мануале, но eng я знаю очень плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:42 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatnow_new_userКоличество всех записей...как узнаёте кол-во всех записей? count(*) вы видимо вообще не знаете sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:42 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
на произвольных запросах узнать количество страниц несоизмеримо затратнее чем вывести одну страницу с помощью оффсета. я б не стал тут заморачиваться. кроме того, если пользователь будет последовательно щелкать по страницам то первые результаты постгре закеширует и этот оффсет вообще на скорости не скажется. ну и естесственно 16мс, 32 мс - это не показатель ни разу. нужно на произвольных(!) данных тестировать неоднократно (тысячи, миллионы раз), иначе вы меряете скорость сетевых интерфейсов, кеша постгре и кеша файловой подсистемы сервера, а не производительность выборки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:46 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
вы собираетесь в каждом запросе делать count(*) ? тогда точно можете не заморачиваться по поводу оффсета, его тормоза будут составлять малые доли процента от всех тормозов )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:49 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
now_new_usercount(*)запрос count(*) будет выполняться не быстрее, чем с любыми значениями limit/offset. поэтому оптимизировав запрос limit/offset вы не ускорите общее время работы двух запросов больше чем на половину. какое ориентировочное ожидается количество всех записей в выборке? now_new_userвы видимо вообще не знаете sqlя знаю не только sql, но и postgresql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:50 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat[quot now_new_user]какое ориентировочное ожидается количество всех записей в выборке? Около 100.000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 16:55 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
now_new_userОколо 100.000.и как собираетесь ускорять запрос select count(*)? он будет выполняться гораздо дольше 30 миллисекунд. может все-таки отказаться от полной разбивки по страницам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 17:06 |
|
||
|
LIMIT и OFFSET
|
|||
|---|---|---|---|
|
#18+
храните промежуточное значение. создайте доп таблицу которая будет содержать кол-во записей в остальных таблицах или если данные не часто добавляются удаляются то можна брать из системных представлений тут проскакивали кажется примеры Со всеми разговариваю уважительно, но недолго. На вопросы типа ...Как дела? ...не отвечаю, это флуд. © Lister the Tormentor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 20:18 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=257&tid=2003865]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 335ms |

| 0 / 0 |
