Без индекса Найти() и НайтиСтроки() перебирают строки одну за другой — на таблице в тысячи строк и частых поисках это заметно медленнее, чем поиск по индексу.
ТЗ.Индексы.Добавить("Товар"); // индекс по одной колонке
ТЗ.Индексы.Добавить("Категория, Товар"); // составной индекс по двум колонкам сразуИндексы.Добавить(Колонки) принимает строку с именами колонок через запятую — как Колонки у Найти(). Платформа сама использует подходящий индекс при вызове Найти()/НайтиСтроки(), если набор и порядок колонок в запросе точно совпадает с одним из объявленных индексов; отдельно указывать «использовать индекс» в самом поиске не нужно.
| Что | Поведение |
|---|---|
| Поиск по колонкам одного индекса | использует индекс — быстро |
| Поиск по колонкам, не совпадающим ни с одним индексом целиком | обычный перебор строк — медленно, как без индекса |
Составной индекс "А, Б" и поиск только по "А" | индекс не используется — нужен отдельный индекс на "А" |
Индекс не бесплатен: он занимает память и пересчитывается при каждом изменении данных в проиндексированных колонках (Добавить, Удалить, Строка.Колонка = Значение) — на таблице, которую в основном заполняют и почти не ищут, индекс скорее замедлит работу, чем ускорит. Стоит заводить, когда таблица уже наполнена и предстоит много поисков по одним и тем же колонкам — например, перед циклом с частыми НайтиСтроки() внутри.