172 похожих чатов

Ребят, подскажите плиз Есть такой запрос select id,

household_id,
device_id,
package_id,
status,
payment_type,
ownership_type,
price,
msisdn,
virtual_msisdn,
transaction_id,
code,
confirmation_count,
code_sent_at,
device_type,
device_display_type,
device_client_version,
device_samsung_duid,
created_at,
updated_at,
code_valid_until,
msisdn_data,
meta,
valid_from,
valid_to,
moboperator,
rate_plan,
billing_id,
inplat_payment_id,
meta::jsonb ->> 'discount_id'::text AS discount_id,
meta::jsonb ->> 'promocode_id'::text AS promocode_id,
household_package_id
from (
select o.*,
row_number() over (partition by id order by id, updated_at desc) as rn
from tv_bmp.orders o
where 1=1
and o.valid_to = '9999-12-31 00:00:00'::timestamp without time zone
or o.valid_to = '2222-12-31 00:00:00'::timestamp without time zone) o1
where rn = 1

Его план:
Subquery Scan on o1 (cost=9348546.09..10970121.98 rows=231158 width=693) (actual time=94045.042..208921.213 rows=39916161 loops=1)
Filter: (o1.rn = 1)
Rows Removed by Filter: 9095872
-> WindowAgg (cost=9348546.09..10388758.71 rows=46231672 width=637) (actual time=94045.028..132101.539 rows=49012033 loops=1)
-> Sort (cost=9348546.09..9464125.27 rows=46231672 width=629) (actual time=94045.017..105937.806 rows=49012033 loops=1)
Sort Key: o.id, o.updated_at DESC
Sort Method: external merge Disk: 18137688kB
-> Index Scan using orders_valid_to_idx on orders o (cost=0.56..2703764.57 rows=46231672 width=629) (actual time=0.017..31535.563 rows=49012033 loops=1)
Planning time: 0.220 ms
Execution time: 212127.598 ms

Проблемный момент заключается в этом месте Sort Method: external merge Disk: 18137688kB
Я вроде сделал индекс, но он не подтягивается почему-то
Подскажите почему так? И вообще возможно-ли внутри оконной функции использовать индексы?

5 ответов

19 просмотров

Сужу сугубо по плану Раз сортировка делается на диске, а не за счёт индекса

вас более опытные товарищи все равно попросят \d таблицы привести. Но я вижу, что на таблице в 50млн строк вы пытаетесь выбрать 40 млн и отсортировать их по id, updated_at (что уже наводит на мысли). Seq scan у вас там есть, но вы же огромную таблицу почти без фильтра пытаетесь вычитать. Он будет там и с индексом и без скорее всего. Проблема скорее всего не в том, что у вас индекс не используется, а в том, что вы много данных пытаетесь отсортировать. Ну и work_mem ваш тут было бы полезно узнать

Ворк мем 256 МБ

операции на диске идут потому что у вас в память все не влезает. Вот по-вашему external merge Disk который пишет вам система влезет в ваши 256Мб?

Нет, конечно Но увеличивать до 20 ГБ, тоже, как я думаю, не совсем целесообразно

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта