|
Не используется intarray index
|
|||
---|---|---|---|
#18+
Приветствую. Есть таблица с полем 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? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2018, 08:51 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
gruender, куда ставили интеррей ? ищите интерреевский оператор . он другой. (префикс должен быть). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2018, 12:14 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
Из доки pg: intarray provides index support for the &&, @>, <@, and @@ operators ( https://www.postgresql.org/docs/9.6/static/intarray.html ). Или какой-то другой оператор имелся в виду? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2018, 14:40 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
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 лет расстрелов через повешенье. желательно ещё с промежуточным вываливанием в перьях. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2018, 15:21 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
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 планировщик работать не будет, т.к. оператор @> будет по обычному массиву, а не интарреевский? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2018, 07:26 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
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 не встречается. Как тогда определить - какого типа @> оператор используется? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2018, 09:05 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
Все, разобрался - оператор был в другой схеме. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2018, 09:28 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
gruenderВсе, разобрался - оператор был в другой схеме. Спасибо. авторкуда ставили интеррей ? ищите интерреевский оператор . он другой. (префикс должен быть). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2018, 09:37 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
gruenderqwwqответить на вопрос религия запрещает ? Вопрос "куда ставили интеррей"? Я его не понимаю. Ставили куда - на сервер, в запрос, в индекс, в схему? странно . у кляузы "криейт екстеншн" кажется есть единственная опцыя "куда" -- и она про схему. при создании индекса вы задаете множество операторов своим опсом. (если не создаете функциональный, в котором оператор может присутствовать битым словом). опс вы указали выше. -- т.е. в первом приближении про это я спрашивать не должен. ну и т.д. а подарок с одноименными операторами , без каких либо попыток промапить кейсы совпадений -- показатель системного мышления наших проваловцев. могли бы и варнинги честно в доку прописать, чтобы не возникало. стесняются, ироды. колхозники сиволапые,ять ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2018, 09:47 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
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 версия стал). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2018, 10:47 |
|
Не используется intarray index
|
|||
---|---|---|---|
#18+
Maxim Boguk, я извиняюсь за (мало) литературные гиперболы, но поставив интеррей в проект с обильным количеством динамо в поисковых ф-ях ... , причем в паблик, я налетел лет так ... назад на подарочек. (всё тщательно отоптимайзенное по существующим индам динамо в автомате перелетело на интерреевские операторы. и инд-ы отвалились, ессно. но тут , если уж перекрываете -- возникает малоподъёмная интереснейшая задача -- разрешения синонимии и частичной эквивалентности операторов на деле -- подменять (плантировщиком) одно другим в кейсах, когда они совпадают и т.п. -- если вы не согласны ее решать (а и поставить ее не просто -- по границам) -- незачем использовать одноименность и перекрывать имена) хорошо, что на кошечках отлаживался. т.е. я всячески за много расширений хороших и не очень. и всячески благодаренъ аффтарам за то, что они поналепили горбатого и не очень. но колхоз, заметаемый под коврик -- раздражает. ну честно напишите большими буквами -- и не будет вопросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2018, 11:05 |
|
|
start [/forum/topic.php?fid=53&msg=39618640&tid=1995880]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 298ms |
total: | 428ms |
0 / 0 |