объектов. посоветуйте в каких случаях лучше хранить таким образом и в каких случаях лучше отказаться и хранить записи в отдельной таблице?
если хранить отдельные записи в junction table записей может быть очень много и соответственно поиск будет дольше.
Были у вас случаи когда вы отказывались от хранения данных в массиве и прибегали к отдельным записям в таблице?
По умолчанию — junction table, наоборот, хранение в массиве требует обоснования. По отдельным значениям можно создать BTree-индекс, а по значениям внутри array/jsonb только GIN-подобный индекс. Поиск будет быстрее в случае Junction table По статистике 50 на 50, так что лучше конкретно опишите ваш кейс
Если там того json большэ пары сотен байт -- то он тожэ будет храниться в отдельной таблицэ, и поиск быстрее просто так не станет... В общем, на самом деле, нюансов очень много -- но думать что "вот json, всё локально" или "вот массив, всё локально" будет быстрее -- опрометчиво.
Один из самых всратых нюансов -- что в postgres нет индэксов на несколько таблиц сразу. То есть на json можно повесить какой-нибудь GIN индэкс, которые укажэт на записи, в которых два поля изнутри json имеют какое-то значение -- а на две таблицы один-ко-многим такое просто так не повесишь...
Хм, а есть пример его эффективности в таком варианте ?🤔
Не понял. Я говорил про неэффективность, а ты хочешь пример эффективности?
А, или ты про эффективность json?
Одно индекса с ключами json по сравнению с двумя условно на двух таблицах)
Запрос типа "товар отвозили на нашем старом каблуке, и среди товаров было офисное кресло" — при нормальной нормальизации базы работает дольше, чем с jsonb
Блин, ночь ужэ, мне завтра на работу вставать.
Спим🤦♀️, просто интересны не синтетические тесты
Не, ну ты захотел! (Нет у меня несинтэтических тэстов). (Я и массивы практически не использую. А чужое, что ко мне в руки падает -- лишний раз давать-то не буду).
Обсуждают сегодня