[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"glossary-index-database::ru":3,"gloss-cluster-index-database::ru":20,"gloss-next-index-database::ru":9},{"slug":4,"category":5,"name":6,"definition":7,"meta_desc":8,"faq":9,"schema_markup":9,"related":10},"index-database","data-infra","Индекс (база данных)","Индекс базы данных — это вспомогательная структура данных, обычно B-дерево или похожая упорядоченная структура, построенная по одному или нескольким столбцам таблицы, чтобы сделать поиск по этим столбцам значительно быстрее, чем сканирование каждой строки. Без индекса поиск конкретной строки (`WHERE email = 'user@example.com'`) требует, чтобы база данных проверила буквально каждую строку таблицы («последовательное сканирование» или «сканирование таблицы») — приемлемо для нескольких сотен строк, губительно для нескольких миллионов. Почему это важно для разработчиков AI\u002FSaaS: индексирование — одно из наиболее эффективных и наименее трудозатратных вмешательств в производительность, и его отсутствие — ведущая причина классической жалобы «приложение стало медленным по мере роста». Оно отличается от — но концептуально связано с — «индексом», который векторная база данных строит поверх эмбеддингов (индекс эмбеддингов): оба обменивают накладные расходы записи и дополнительное хранение на более быстрое чтение, просто над очень разными видами данных и с использованием очень разных базовых структур (B-деревья для точных\u002Fдиапазонных совпадений по скалярным значениям, HNSW\u002FIVFFlat для приближённого сходства по векторам высокой размерности). Как это работает: типичный B-tree индекс хранит значения столбца в отсортированном порядке вместе с указателем обратно на полную строку, так что база данных может провести бинарный поиск до нужного значения вместо линейного сканирования — превращая поиск O(n) примерно в O(log n). Индексы следует добавлять на столбцы, часто используемые в условиях `WHERE`, условиях `JOIN` и предложениях `ORDER BY` — но не бездумно, потому что каждый индекс добавляет накладные расходы к каждой операции `INSERT`\u002F`UPDATE`\u002F`DELETE` (сам индекс тоже нужно обновлять) и потребляет дополнительное дисковое пространство; чрезмерное индексирование таблицы с интенсивной записью — реальная и распространённая ошибка. Составные индексы (охватывающие несколько столбцов, например `(customer_id, created_at)`) ускоряют запросы, фильтрующие или сортирующие именно по этой комбинации, но менее полезны для запросов, затрагивающих только второй столбец отдельно, из-за особенностей упорядочивания B-дерева — тонкость, которая сбивает с толку многих в работе по оптимизации запросов. Практический пример: таблица `events` многотенантного SaaS вырастает до 40 миллионов строк; запрос панели, фильтрующий `WHERE customer_id = ? AND created_at > ?`, начинает занимать 6+ секунд как последовательное сканирование. Добавление составного индекса `CREATE INDEX idx_events_customer_created ON events (customer_id, created_at);` снижает этот же запрос до менее 10 мс, потому что Postgres теперь может перейти напрямую к релевантным строкам для этого клиента и временного диапазона, вместо чтения всей таблицы при каждой загрузке панели. Команда также запускает `EXPLAIN ANALYZE` для запроса до и после, чтобы подтвердить, что планировщик запросов действительно выбрал использование нового индекса, а не проигнорировал его — шаг, который стоит сделать привычным, поскольку индекс, который существует, но не используется (частый результат неудачного порядка столбцов в составном индексе), не даёт никакой выгоды, но всё равно оплачивает полную стоимость времени записи.","Индекс базы данных — структура данных, ускоряющая поиск по определённым столбцам ценой дополнительного хранения и накладных расходов на запись.",null,[11,14,17],{"slug":12,"name":13},"embedding-index","Индекс эмбеддингов (Embedding Index)",{"slug":15,"name":16},"postgresql","PostgreSQL",{"slug":18,"name":19},"sharding","Шардирование (Sharding)",[21,25,28,31,34,38,41,44,47,50,54,57],{"slug":22,"category":5,"name":23,"updated_at":24},"acid","ACID","2026-08-24T02:46:37+00:00",{"slug":26,"category":5,"name":27,"updated_at":24},"ann-search","ANN-поиск (приближённый поиск ближайших соседей)",{"slug":29,"category":5,"name":30,"updated_at":24},"backpressure","Обратное давление (backpressure)",{"slug":32,"category":5,"name":33,"updated_at":24},"batch-processing","Пакетная обработка (Batch Processing)",{"slug":35,"category":5,"name":36,"updated_at":37},"bm25","BM25","2026-08-24T02:46:38+00:00",{"slug":39,"category":5,"name":40,"updated_at":24},"cache","Кэш (Cache)",{"slug":42,"category":5,"name":43,"updated_at":24},"cap-theorem","Теорема CAP (CAP theorem)",{"slug":45,"category":5,"name":46,"updated_at":24},"change-data-capture","Захват изменений данных (CDC)",{"slug":48,"category":5,"name":49,"updated_at":24},"chroma","Chroma",{"slug":51,"category":5,"name":52,"updated_at":53},"chunk-overlap","Перекрытие фрагментов","2026-08-24T03:30:02+00:00",{"slug":55,"category":5,"name":56,"updated_at":24},"columnar-storage","Колоночное хранение",{"slug":58,"category":5,"name":59,"updated_at":24},"connection-pooling","Пулинг соединений (Connection Pooling)"]