TGViewer
SQL и Анализ данных SQL и Анализ данных @databases_tg · 12.5K subscribers
Post #1057 3.42K
🎯 Продвинутый SQL-хак: Эффективный поиск по JSONB в PostgreSQL

Если вы работаете с PostgreSQL и храните данные в формате JSONB, вы наверняка сталкивались с проблемой производительности при запросах по вложенным ключам. Вот практический приём, который реально улучшает эффективность таких запросов.

🔍 Проблема

Выполняя запрос:


SELECT *
FROM events
WHERE data->'user'->>'email' = 'user@example.com';


— вы полагаетесь на оператор ->> для извлечения значения, но такой запрос не использует индекс, даже если JSONB-колонка проиндексирована.

✅ Решение: Используйте выражения + индекс по выражению

1. Создайте индекс по выражению:


CREATE INDEX idx_events_user_email
ON events ((data->'user'->>'email'));


2. Теперь ваш запрос будет использовать индекс:


SELECT *
FROM events
WHERE data->'user'->>'email' = 'user@example.com';


🚀 Бонус: Ускорение с GIN и jsonb_path_ops

Если вы часто фильтруете по множеству разных JSON-полей:


CREATE INDEX idx_events_data_gin
ON events USING GIN (data jsonb_path_ops);


И используйте операторы @> для запросов:


SELECT *
FROM events
WHERE data @> '{"user": {"email": "user@example.com"}}';


📌 Такой подход отлично масштабируется и значительно снижает нагрузку на базу.

💡 Итог: Индексация по выражениям и правильный выбор оператора (`@>`, `->>`) — ключ к быстрой работе с JSONB в PostgreSQL.
  • 👍 5
  • ❤ 4
  • 🔥 3
  • 🥰 1
More from @databases_tg
  1. Oct 2, 2026Как SQLite превращает числа в текст в 2 раза быстрее? Трюк с парами цифр Обычно число пере…
  2. Oct 2, 2026В субботу, 17 октября, Москва станет точкой притяжения для всех специалистов в области Rec…
  3. Oct 1, 2026Жиз
  4. Sep 30, 2026📝 5 уровней ИИ-агентов: от промпта до продакшена Context, loop, Jev, harness и evals: раз…
  5. Sep 26, 2026UPDATE — оператор обновления данных в MySQL 🗂️ Если в таблице нужно изменить значение в у…
  6. Sep 25, 2026🧠 SQL-задача с подвохом Есть таблица транзакций: CREATE TABLE transactions ( id int PRIMA…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →