Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Общее определение
Индекс — это специальная структура данных в БД, которая ускоряет поиск и фильтрацию. Без индексов БД просматривает все строки (O(n)), с индексом поиск становится O(log n).
Как работает индекс
Без индекса: O(n) — просмотреть все 1000000 строк
С индексом: O(log n) — структурированный поиск (B-tree)
Виды индексов в 1С
1. Простой индекс (Single Column)
Индекс по одному полю:
Индекс "ИндексПоКонтрагенту" { Поля: Контрагент }
// Использование
Запрос = Новый Запрос("SELECT Ссылка FROM Документ.ПриходТоваров WHERE Контрагент = &К");
Когда помогает:
- Поиск по точному значению
- Диапазонные запросы (>=, <=)
- Сортировка
2. Составной индекс (Composite Index)
Индекс по нескольким полям:
Индекс "ИндексПоДатеИКонтрагенту" {
Поля: Дата, Контрагент
}
// Использование
Запрос = Новый Запрос("SELECT Ссылка FROM Документ.ПриходТоваров WHERE Дата >= &ДатаН AND Контрагент = &К");
Когда помогает:
- Поиск по нескольким условиям
- Снижает размер результата
- Критичен порядок полей
3. Уникальный индекс (Unique Index)
Гарантирует уникальность значений:
Индекс "УникальныйНомер" {
Поля: Номер
Уникальный: Да
}
// Если попытаться вставить дубликат → ошибка БД
Особенности:
- Автоматически проверяет уникальность
- БД откажет вставить дубликат
4. Полнотекстовый индекс (Full-Text Index)
Поиск по содержимому текста:
Индекс "ПолнотекстовыйПоиск" {
ПолнотекстовыйПоиск: Истина
Поля: Содержание
}
// Использование
Запрос = Новый Запрос("SELECT Ссылка FROM Справочник.Документы WHERE Содержание СОДЕРЖИТ &Текст");
5. Индекс для сортировки
Ускоряет сортировку:
Индекс "ИндексДляСортировки" {
Поля: Дата DESC
}
// Сортировка становится быстрой
Запрос = Новый Запрос("SELECT Ссылка FROM Документ.ПриходТоваров УПОРЯДОЧИТЬ ПО Дата УБЫВАНИЕ");
Создание индексов
В Designer'е:
- Правая кнопка на объекте → Индексы
- Создать новый индекс
- Задать:
- Имя индекса
- Поля индекса
- Уникальный (да/нет)
- Полнотекстовый (да/нет)
Примеры практического использования
Пример 1: Поиск по диапазону дат
// БЕЗ индекса — медленно (просмотр всех строк)
Запрос = Новый Запрос("SELECT Ссылка FROM Документ.ПриходТоваров WHERE Дата >= &ДатаН AND Дата <= &ДатаК");
// С индексом по Дате — быстро (O(log n))
Пример 2: Поиск в иерархии
Индекс "ИндексПоРодителю" { Поля: Родитель }
// Быстрый поиск дочерних элементов
Запрос = Новый Запрос("SELECT Ссылка FROM Справочник.ГруппаТоваров WHERE Родитель = &Группа");
Пример 3: Уникальный индекс
Индекс "УникальныйКод" { Поля: КодНоменклатуры, Уникальный: Да }
// При попытке вставить дубликат → ошибка
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Номенклатура.КодНоменклатуры = "12345";
Номенклатура.Записать(); // Если "12345" уже есть → ошибка
Влияние на производительность
Таблица: 1,000,000 строк
FULL SCAN (без индекса): ~5 секунд
С индексом: ~5 миллисекунд
Ускорение: 1000x
Когда индекс ЗАМЕДЛЯЕТ
// Индекс НЕ используется, если применена функция
WHERE НомерДокумента + 100 = &Номер // Функция на поле!
// Переписать без функции
WHERE НомерДокумента = &Номер - 100 // Индекс сработает
Правила создания индексов
1. Индексируй поля в WHERE:
WHERE Контрагент = &Контрагент // Индекс!
2. Индексируй поля в ORDER BY:
ORDER BY Дата DESC // Индекс ускорит сортировку
3. Составные индексы: порядок важен
// WHERE Дата AND Статус → Индекс(Дата, Статус) - правильно
// WHERE Дата AND Статус → Индекс(Статус, Дата) - менее эффективно
4. Не переиндексируй:
// Слишком много индексов замедляет вставки
// Оптимум: 3-5 индексов на таблицу
Недостатки индексов
- Замедляют вставку/обновление/удаление
- Занимают место на диске (~30% от размера таблицы)
- Требуют периодической дефрагментации
Правильное использование индексов — ключ к быстрым запросам в 1С.
Похожие вопросы
- Какие есть виртуальные таблицы у регистра расчётов?
- Как расследуешь ошибки принимаемых запросов?
- Что такое контекст формы в 1С?
- Какие стандарты 1С по организации проведения документа вы знаете?
- Как организовать обмен данными между 1С и другими системами?
- Что такое транзакция в 1С? Есть ли вложенные транзакции?
- Какие знаешь способы пользоваться запросом?
- Может ли быть таблица итогов у регистра сведений?
- В чем разница между хранением информации в регистре сведений и в табличной части?
- Как организовать контроль остатков при проведении документа?
- Значения каких типов можно передавать в параметр "период" виртуальной таблицы регистра накоплений?
- Зачем использовать конструкцию ВЫРАЗИТЬ?
- В каком случае используешь индексы в запросах?
- Что такое COM-соединение в 1С и когда его использовать?
- В чем разница между справочником и планом видов характеристик?
- Что такое NULL, Неопределено, ПустаяСсылка и БитаяСсылка в 1С? Чем они отличаются?
- Что сделать чтобы можно было производить отладку кода программы, которая выполняется в фоновом задании?
- Чем отличается подход к доработке типовых и нетиповых конфигураций?
- Что происходит, когда мы обращаемся к объекту через точку?
- Какие есть типы блокировок при проведении?