Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не используется intarray index / 11 сообщений из 11, страница 1 из 1
21.03.2018, 08:51
    #39617939
gruender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
Приветствую.

Есть таблица с полем agg_series_id. Тип поля integer[]. По полю создан индекс, примерно так: CREATE INDEX idx_intarray ON some_tbl USING GIN (agg_series_id gin__int_ops). В таблице примерно 500к строк.

Проблема: для запроса SELECT count(*) FROM web.item_search WHERE agg_series_id @> ARRAY [1] - план будет такой:

Aggregate (cost=129835.91..129835.92 rows=1 width=8)
-> Seq Scan on some_tbl (cost=0.00..129835.89 rows=11 width=0)
Filter: (agg_series_id @> '{1}'::integer[])

set enable_seqscan=off, vacuum analyze и увеличение статистики на поле эффекта не дают - план все равно останется с seqscan. Но если индекс создать не `intarray`, т.е. без gin__int_ops - CREATE INDEX idx_test ON some_tbl USING GIN (agg_series_id) - то план меняется на использование вот этого обычного индекса:

Aggregate (cost=55.93..55.94 rows=1 width=8)
-> Bitmap Heap Scan on materialize_item_search_1520832700 (cost=12.08..55.91 rows=11 width=0)
Recheck Cond: (agg_series_id @> '{1}'::integer[])
-> Bitmap Index Scan on test_index_agg_series_id_array2 (cost=0.00..12.08 rows=11 width=0)
Index Cond: (agg_series_id @> '{1}'::integer[])

Косты становятся нормальные. Собственно вопрос: почему индекс по `intarray` может не использоваться при запросе, а индекс по обычному array - используется? В интернете ничего не нашел. Более того, в таблице еще несколько полей integer[] и по ним такая же ситуация - специальный индекс intarray не используется никак, а обычный используется.

Я бы и удалил индексы intarray, создав обычные, но боюсь, что после какого-нибудь обновления pg эта логика изменится и обычные gin индексы наоборот не будут использоваться, а нужны будут intarray. Пока это отловишь - пройдет какое-то время.

На SO написали в комменте, что простой GIN индекс поддерживает @> оператор, но зачем тогда вообще нужен gin__int_ops?
...
Рейтинг: 0 / 0
21.03.2018, 12:14
    #39618080
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
gruender,
куда ставили интеррей ? ищите интерреевский оператор . он другой. (префикс должен быть).
...
Рейтинг: 0 / 0
21.03.2018, 14:40
    #39618252
gruender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
Из доки pg: intarray provides index support for the &&, @>, <@, and @@ operators ( https://www.postgresql.org/docs/9.6/static/intarray.html ). Или какой-то другой оператор имелся в виду?
...
Рейтинг: 0 / 0
21.03.2018, 15:21
    #39618300
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
gruenderИз доки pg: intarray provides index support for the &&, @>, <@, and @@ operators ( https://www.postgresql.org/docs/9.6/static/intarray.html ). Или какой-то другой оператор имелся в виду?
ответить на вопрос религия запрещает ?

авторThe operators &&, @> and <@ are equivalent to PostgreSQL's built-in operators of the same names, except that they work only on integer arrays that do not contain nulls, while the built-in operators work for any array type. но немного другие.

за отсутствие выделенного указания для лохов, что это именно другие операторы (с теми же именами) писателей справки пороть на конюшнях. а разработчикам, за использование тех же имён -- 1000 лет расстрелов через повешенье. желательно ещё с промежуточным вываливанием в перьях.
...
Рейтинг: 0 / 0
22.03.2018, 07:26
    #39618601
gruender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
qwwqответить на вопрос религия запрещает ?

Вопрос "куда ставили интеррей"? Я его не понимаю. Ставили куда - на сервер, в запрос, в индекс, в схему?

qwwqthey work only on integer arrays that do not contain nulls, while the built-in operators work for any array type

Т.е. то, что поле nullable, автоматически означает, что с индексом gin__int_ops планировщик работать не будет, т.к. оператор @> будет по обычному массиву, а не интарреевский?
...
Рейтинг: 0 / 0
22.03.2018, 09:05
    #39618626
gruender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
qwwqавторThe operators &&, @> and <@ are equivalent to PostgreSQL's built-in operators of the same names, except that they work only on integer arrays that do not contain nulls, while the built-in operators work for any array type. но немного другие.

Я проверил: поле not null и в массивах полей null не встречается. Как тогда определить - какого типа @> оператор используется?
...
Рейтинг: 0 / 0
22.03.2018, 09:28
    #39618640
gruender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
Все, разобрался - оператор был в другой схеме. Спасибо.
...
Рейтинг: 0 / 0
22.03.2018, 09:37
    #39618645
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
gruenderВсе, разобрался - оператор был в другой схеме. Спасибо.

авторкуда ставили интеррей ? ищите интерреевский оператор . он другой. (префикс должен быть).
...
Рейтинг: 0 / 0
22.03.2018, 09:47
    #39618648
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
gruenderqwwqответить на вопрос религия запрещает ?

Вопрос "куда ставили интеррей"? Я его не понимаю. Ставили куда - на сервер, в запрос, в индекс, в схему?

странно . у кляузы "криейт екстеншн" кажется есть единственная опцыя "куда" -- и она про схему.

при создании индекса вы задаете множество операторов своим опсом. (если не создаете функциональный, в котором оператор может присутствовать битым словом). опс вы указали выше. -- т.е. в первом приближении про это я спрашивать не должен.

ну и т.д.

а подарок с одноименными операторами , без каких либо попыток промапить кейсы совпадений -- показатель системного мышления наших проваловцев. могли бы и варнинги честно в доку прописать, чтобы не возникало. стесняются, ироды. колхозники сиволапые,ять
...
Рейтинг: 0 / 0
22.03.2018, 10:47
    #39618714
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
qwwq,

Я вообще сейчас без КРАЙНЕЙ необходимости не рекомендую intarray ставить и использовать.
Был же классная грабля на которую я наступил когда добавляли статистику для массивов - системные операторы для массивов ее пользовали а вот intarray нет (и было очень весело искать почему).
Вообще поиск по postgresql-bugs по intarray показывает много чего интересного за последние лет 10, из них минимум три репортил я:
https://www.postgresql.org/message-id/flat/201111242312.pAONCO9p013564%40wwwmaster.postgresql.org#201111242312.pAONCO9p013564@wwwmaster.postgresql.org]https://www.postgresql.org/message-id/flat/201111242312.pAONCO9p013564@wwwmaster.postgresql.org#201111242312.pAONCO9p013564@wwwmaster.postgresql.org
https://www.postgresql.org/message-id/flat/20150313145456.2516.25890%40wrigleys.postgresql.org#20150313145456.2516.25890@wrigleys.postgresql.org]https://www.postgresql.org/message-id/flat/20150313145456.2516.25890@wrigleys.postgresql.org#20150313145456.2516.25890@wrigleys.postgresql.org
https://www.postgresql.org/message-id/flat/20150315010608.14913.94682%40wrigleys.postgresql.org#20150315010608.14913.94682@wrigleys.postgresql.org]https://www.postgresql.org/message-id/flat/20150315010608.14913.94682@wrigleys.postgresql.org#20150315010608.14913.94682@wrigleys.postgresql.org

После чего мне все это надоело и я решил что generic GIN по массивам вполне меня устраивает (а последние годы он еще и быстрее чем intarray версия стал).
...
Рейтинг: 0 / 0
22.03.2018, 11:05
    #39618733
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется intarray index
Maxim Boguk,

я извиняюсь за (мало) литературные гиперболы, но поставив интеррей в проект с обильным количеством динамо в поисковых ф-ях ...
, причем в паблик, я налетел лет так ... назад на подарочек. (всё тщательно отоптимайзенное по существующим индам динамо в автомате перелетело на интерреевские операторы. и инд-ы отвалились, ессно.

но тут , если уж перекрываете -- возникает малоподъёмная интереснейшая задача -- разрешения синонимии и частичной эквивалентности операторов на деле -- подменять (плантировщиком) одно другим в кейсах, когда они совпадают и т.п. -- если вы не согласны ее решать (а и поставить ее не просто -- по границам) -- незачем использовать одноименность и перекрывать имена)


хорошо, что на кошечках отлаживался.

т.е. я всячески за много расширений хороших и не очень. и всячески благодаренъ аффтарам за то, что они поналепили горбатого и не очень. но колхоз, заметаемый под коврик -- раздражает. ну честно напишите большими буквами -- и не будет вопросов.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не используется intarray index / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]