Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
05.06.2019, 17:15
|
|||
---|---|---|---|
|
|||
Неиспользование индексов в запросе с limit..offset... |
|||
#18+
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit Столкнулся со странным поведение планировщика. Есть таблица такого рода: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В нёй несколько миллионов строк. Решается такая задача: партнер в своём личном кабинете должен видеть таблицу своих заказов, с фильтром по датам, постраничным выводом и возможностью сортировки по разным столбцам. Решается это такого рода запросом: Код: sql 1. 2. 3. 4.
И тут начинается такое. Если offset имеет малое значение, то индекс orders_partner_id_date_created_index не используется, и запрос занимает много времени, страница выводится долго. Например, в случае offset=10 получается так: Код: sql 1. 2. 3. 4.
Однако, когда страницы листаются дальше, с какого-то значения offset вдруг этот индекс начинает работать и всё выводится очень и очень шустро. Например, вывод четвертой страницы: Код: sql 1. 2. 3. 4.
план его выполнения: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Кто-нибудь с таким сталкивался? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.06.2019, 17:26
|
|||
---|---|---|---|
Неиспользование индексов в запросе с limit..offset... |
|||
#18+
ZayatsZ, криво...сть оптимизатора пж -- известный факт. математиксы там не ночевали. попробуйте так : Код: sql 1. 2. 3. 4.
но пагинация оффсетом -- сама по себе кривое решение. к тому же есть подозрение, что ордер-ид внутри партнера 100%% коррелирует с дейт--криэйтед и с хорошей точностью можно так : Код: sql 1. 2. 3. 4.
где в пределе можно перейти на пагинацию не оффсетом, а от достигнутого . ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.06.2019, 17:36
|
|||
---|---|---|---|
|
|||
Неиспользование индексов в запросе с limit..offset... |
|||
#18+
qwwq, Первый вариант сработал, теперь индекс всегда используется. Жесть какая, однако. Вариант с пагинацией "от текущего" рассматривался - но кровь из носа нужна возможность перейти сразу на произвольную страницу. Спасибо большое! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1995174]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 148ms |
0 / 0 |