
Max
15.03.2018
12:02:00
Подскажите почему при anti join оптимизатор не использует индексы?
https://stackoverflow.com/questions/5274851/postgres-anti-join-needs-table-scan
Проблема описана тут и set enable_seqscan to off; ее решает, но хотелось бы более правильное решение

Darafei
15.03.2018
12:04:53
статистика свежая?
вообще - смотреть внимательно в косты конкретного запроса с и без set enable_seqscan to off;

Max
15.03.2018
12:05:54
Запрос вот, любой из двух

Google

Max
15.03.2018
12:05:54
это план без set enable_seqscan to off;

Ilia
15.03.2018
12:06:36
Я думаю это специфический случай, а не характерный. Т.е. не анти джойн определяет использование индекса. А неиспользут по общим причинам

Max
15.03.2018
12:06:47
А это уже с set enable_seqscan to off;

Darafei
15.03.2018
12:07:43
посмотри в кост индекс онли скана, он же у тебя зашкаливает

Max
15.03.2018
12:08:55
ну это мультикаломный индекс по двум полям, может из за этого?

Darafei
15.03.2018
12:09:45
из чего складывается кост индекс онли скана?

Айтуар
15.03.2018
12:10:15
Напиши тогда статью, на хабре например. И ещё вопрос - на 2 серваках можно развернуть с ним HA кластер, или нужен 3-й с арбитром?

Darafei
15.03.2018
12:10:40
vacuum этой таблице делал?

Max
15.03.2018
12:11:22

Google

Darafei
15.03.2018
12:12:23
а твой запрос с индекс онли сканами по факту быстрее?

Max
15.03.2018
12:12:51

Darafei
15.03.2018
12:13:26
потому что если ты забыл сделать vacuum, то index only scan может стать ещё хуже, чем seq scan
seq scan хоть по одному разу в страничку заглядывает

Yaroslav
15.03.2018
12:14:01

Darafei
15.03.2018
12:14:05
а что если просто всё переписать на EXCEPT?

Max
15.03.2018
12:14:35
я никогда не сталкивался с такими обьемами данных, поэтому прошу совета, подскажите как лучше сделать

Darafei
15.03.2018
12:15:35
для начала по возможности сделать cluster по индексу и сделать vacuum analyze
а оттуда начинать копать вглубь

Max
15.03.2018
12:16:00

Darafei
15.03.2018
12:16:19
а сколько у тебя work_mem?
http://pgtune.leopard.in.ua/ cделан? :)

Max
15.03.2018
12:17:45

Darafei
15.03.2018
12:18:57
эмм, у вас есть DBA?

Max
15.03.2018
12:19:21
)) нет

Darafei
15.03.2018
12:19:30
если у тебя нет доступа к серверу, и на нём дефолтовый work_mem, то им скорее всего просто забыли заняться

Сергей
15.03.2018
12:19:37
4MB
тут был хороший стикер

Darafei
15.03.2018
12:20:00

Google

Darafei
15.03.2018
12:20:21
1) http://pgtune.leopard.in.ua/ как минимум
2) vacuum analyze;
и после этого уже смотреть в планы

Max
15.03.2018
12:23:18

Darafei
15.03.2018
12:24:01
скорее всего у тебя тупо сортировка в except не влезает в work_mem, хотя могла бы
и оттого хочет делаться на диске
возможно, тебе просто нужен except, в который ты добавишь два одинаковых order by, чтобы скан был по индексу, а не по таблице

Aw
15.03.2018
12:39:08
Давайте все хранить в текстовых файлах, это же так удобно.?