[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-postgresql-chto-takoe-chastichnye-indeksy-i-indeksy-na-vyrazheniyakh":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},940,"chto-takoe-chastichnye-indeksy-i-indeksy-na-vyrazheniyakh",28,"postgresql","PostgreSQL","🐘","Что такое частичные индексы и индексы на выражениях?","Частичный индекс (partial index) строится только для части строк таблицы, а индекс на выражении — на результате функции. Оба подхода позволяют создавать компактные и целевые индексы вместо тяжёлых полных.\n\n### Частичный индекс\n\n```sql\n-- Индекс только по активным транзакциям\nCREATE INDEX idx_tx_active ON transactions (account_id)\nWHERE status = 'PENDING';\n\n-- Значительно меньше обычного индекса, быстрее обновляется\n-- Используется только если в запросе совпадает условие:\nSELECT * FROM transactions\nWHERE account_id = 100 AND status = 'PENDING';  -- использует idx_tx_active\n```\n\n\u003Cdetails>\u003Csummary>Типичные применения частичных индексов\u003C\u002Fsummary>\n\n```sql\n-- Индекс только по необработанным записям\nCREATE INDEX idx_queue_unprocessed ON task_queue (created_at)\nWHERE processed = false;\n\n-- Уникальность только для активных записей\nCREATE UNIQUE INDEX idx_unique_active_email ON users (email)\nWHERE is_deleted = false;\n\n-- Индекс исключая NULL\nCREATE INDEX idx_tx_reference ON transactions (reference_number)\nWHERE reference_number IS NOT NULL;\n```\n\n\u003C\u002Fdetails>\n\n### Индекс на выражении (expression index)\n\nИндекс, построенный на результате функции или выражения, а не на значении столбца напрямую.\n\n```sql\n-- Индекс для регистронезависимого поиска\nCREATE INDEX idx_users_email_lower ON users (lower(email));\nSELECT * FROM users WHERE lower(email) = 'user@bank.ru';\n\n-- Индекс на дату из timestamp\nCREATE INDEX idx_tx_date ON transactions (date(created_at));\nSELECT * FROM transactions WHERE date(created_at) = '2024-06-15';\n\n-- Индекс на извлечённое значение JSONB\nCREATE INDEX idx_meta_type ON transactions ((metadata ->> 'type'));\nSELECT * FROM transactions WHERE metadata ->> 'type' = 'transfer';\n```\n\nЗапрос должен содержать **точно такое же выражение**, которое использовалось при создании индекса, иначе оптимизатор не сможет его применить.\n\n> **На собеседовании:** частичные индексы — это «серебряная пуля» для таблиц-очередей, где 99% строк обработаны и только 1% актуальны. Индекс на 1% строк вместо 100% — разница в размере и скорости обновления на порядки.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое частичные индексы и индексы на выражениях? — Gymterview","Частичный индекс (partial index) строится только для части строк таблицы, а индекс на выражении — на результате функции. Оба подхода позволяют создавать компакт","Частичный индекс (partial index) строится только для части строк таблицы, а индекс на выражении — на результате функции.",[7,13],"Частичный индекс (partial index) строится только для части строк таблицы, а индекс на выражении — на результате функции. Оба подхода позволяют создавать компактные и целевые индексы вместо тяжёлых полных.",true]