[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-postgresql-kak-indeksirovat-jsonb-polya":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},935,"kak-indeksirovat-jsonb-polya",28,"postgresql","PostgreSQL","🐘","Как индексировать JSONB-поля?","Для эффективного поиска по JSONB существует три основных подхода: GIN-индекс на всё поле, GIN с классом `jsonb_path_ops` и B-tree на конкретное выражение. Выбор зависит от паттерна запросов.\n\n### GIN-индекс на всё поле (jsonb_ops)\n\n```sql\nCREATE INDEX idx_settings_gin ON client_settings USING GIN (settings);\n```\n\nПоддерживает операторы: `@>`, `?`, `?|`, `?&`. Это наиболее универсальный вариант.\n\n### GIN-индекс с классом jsonb_path_ops\n\n```sql\nCREATE INDEX idx_settings_path ON client_settings USING GIN (settings jsonb_path_ops);\n```\n\nПоддерживает **только** оператор `@>`, но индекс компактнее и быстрее, чем `jsonb_ops`.\n\n### B-tree индекс на конкретное выражение\n\n```sql\n-- Если часто ищем по конкретному ключу\nCREATE INDEX idx_settings_theme ON client_settings ((settings ->> 'theme'));\n\n-- Использование:\nSELECT * FROM client_settings WHERE settings ->> 'theme' = 'dark';\n```\n\n### Сравнение подходов\n\n| Подход | Размер | Операторы | Когда использовать |\n|---|---|---|---|\n| GIN `jsonb_ops` | Большой | `@>`, `?`, `?|`, `?&` | Поиск по произвольным ключам |\n| GIN `jsonb_path_ops` | Меньше | Только `@>` | Поиск по вхождению |\n| B-tree на выражении | Маленький | `=`, `\u003C`, `>`, `LIKE` | Поиск по конкретному ключу |\n\n> **На собеседовании:** покажите понимание компромиссов. GIN `jsonb_path_ops` — лучший выбор, если нужен только `@>` (самый частый случай). B-tree на выражении — если поиск всегда по одному и тому же ключу. Не забудьте упомянуть, что `->>`-выражение в WHERE должно совпадать с выражением в индексе.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Как индексировать JSONB-поля? — Gymterview","Для эффективного поиска по JSONB существует три основных подхода: GIN-индекс на всё поле, GIN с классом `jsonb_path_ops` и B-tree на конкретное выражение. Выбор","Для эффективного поиска по JSONB существует три основных подхода: GIN-индекс на всё поле, GIN с классом `jsonb_path_ops`",[7,13],"Для эффективного поиска по JSONB существует три основных подхода: GIN-индекс на всё поле, GIN с классом `jsonb_path_ops` и B-tree на конкретное выражение. Выбор зависит от паттерна запросов.",true]