Добрый день коллеги!
Задался вопросом оптимизации одного запроса и столкнулся с такой историей.
Дано:
Иерархический справочник, дополнительных индексов не создавалось, в справочнике примерно 40 групп и 500 элементов
Необходимо:
Сделать запрос к элементам определенной группы и выбрать все реквизиты этих элементов
Решение:
Казалось бы простая задача, но вопрос возник по индексам. Стандартный индекс (для иерархического справочника), который 1С создает сама - это [Родитель + ЭтоГруппа + ...], т.е. индекс должен сработать если в условии будут поля Родитель или Родитель + ЭтоГруппа, и все вроде бы так срабатывает "index scan", и если добавить в условие ПометкаНаУдаление, то по идее индекс работать не должен (по крайне менее так до сих пор написано в ИТС), но индекс все равно отрабатывает, добавляется лишь условие по фильтру, так вот почему?
Задался вопросом оптимизации одного запроса и столкнулся с такой историей.
Дано:
Иерархический справочник, дополнительных индексов не создавалось, в справочнике примерно 40 групп и 500 элементов
Необходимо:
Сделать запрос к элементам определенной группы и выбрать все реквизиты этих элементов
Решение:
Казалось бы простая задача, но вопрос возник по индексам. Стандартный индекс (для иерархического справочника), который 1С создает сама - это [Родитель + ЭтоГруппа + ...], т.е. индекс должен сработать если в условии будут поля Родитель или Родитель + ЭтоГруппа, и все вроде бы так срабатывает "index scan", и если добавить в условие ПометкаНаУдаление, то по идее индекс работать не должен (по крайне менее так до сих пор написано в ИТС), но индекс все равно отрабатывает, добавляется лишь условие по фильтру, так вот почему?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) не совсем согласен, на сколько я помню для "index seek" это при полном покрытии, должно не только условие подходить, но и выборка и сортировка под таблицу индекса, да и на практике как я и говорил в первом случае тоже выдает "index scan" (когда Родитель + ЭтоГруппа)
(3)
Не уверен, но index seek при поиске данных и index scan при сортировке никоим образом друг другу не мешают.
Оптимизатор, в определенных случаях, может использовать один проход по индексу, и для поиска и для сортировки, тогда получим index scan.
Вы ничего про сортировку не говорили, и утверждаете, что имеете не clasterd index scan, а просто index scan.
Поэтому делаем вывод, что в первом случае index scan получили не из-за сортировки, а просто потому, что делать index seek and nested loops оптимизатору показалось менее оптимальным, чем простой scan.
Теперь по второму случаю - тут я не понял, кто вам сказал, что при неполном покрытии индекса, если остальные условия заданы индекс не используется, понятия не имею. Именно при неполном покрытии индекса и получаем либо index scan либо table scan.
Не уверен, но index seek при поиске данных и index scan при сортировке никоим образом друг другу не мешают.
Оптимизатор, в определенных случаях, может использовать один проход по индексу, и для поиска и для сортировки, тогда получим index scan.
Вы ничего про сортировку не говорили, и утверждаете, что имеете не clasterd index scan, а просто index scan.
Поэтому делаем вывод, что в первом случае index scan получили не из-за сортировки, а просто потому, что делать index seek and nested loops оптимизатору показалось менее оптимальным, чем простой scan.
Теперь по второму случаю - тут я не понял, кто вам сказал, что при неполном покрытии индекса, если остальные условия заданы индекс не используется, понятия не имею. Именно при неполном покрытии индекса и получаем либо index scan либо table scan.
(10)
Я думал примерно в этом же направлении, что с учетом того что записей в таблице мало, планировщик решил использовать index scan, если сократить запрос, например выбирать только родителя с темеже условиями, то срабатывает как раз "index seek". Кластерный был бы, по идее если условие из ссылки (на сколько я помню).
Я думал примерно в этом же направлении, что с учетом того что записей в таблице мало, планировщик решил использовать index scan, если сократить запрос, например выбирать только родителя с темеже условиями, то срабатывает как раз "index seek". Кластерный был бы, по идее если условие из ссылки (на сколько я помню).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот