виде JSON массива ключей таблицы table_sub.
В итоге запрос идет такой:
SELECT FROM table_base p
CROSS JOIN json_array_elements_text(e.children) pc (child_id)
JOIN table_sub c ON pc.child_id :: INT = c.id
Можно ли без json_array_elements_text сделать JOIN двух таблиц, через IN, = ANY и т.п.? Что-то не могу найти для JSON вариантов
Через = ANY (ARRAY((SELECT json_array_elements_text(p.children))) :: INT[]) получилось ускорить запрос, но можно ли на ARRAY((SELECT json_array_elements_text(p.children))) :: INT[] поставить индекс?
Поставить индэкс, конечно, не возбраняется. Btree, в вашэм случае ничего не даст. Gin ещё можэт иметь смысл в некоторых случаях, но... В общем, чтобы был шанс — надо понимать что эти индэксы делают. Точнее, как postgres по ним ищет и что можэт в процэссе поиска произойти.
Да это понятно. Просто хотя бы прочитать в каком направлении почитать. А btree и gin не подходят, говорит тип не соответствует =)
А вообще — https://t.me/pgsql/303899
Обсуждают сегодня