SARG предикаты в MS SQL Server
Довольно часто у начинающих разработчиков возникает вопрос почему оптимизатор запросов не использует поиск по нужному им индексу. Работа оптимизатора тема очень не простая и под капотом у него куча нюансов. Но есть два момента на которые стоит обратить внимания в первую очередь, это селективность и какие предикаты поиска используются. Про селективность, а конкретней про статистику в следующий раз, а сейчас немного про SARG предикаты. SARG (Seekable/Searchble Arguments) предикаты позволяют сделать поиск по индексу. Любые манипуляции над столбцами которые участвуют в поиске не позволяют использовать алгоритмы поиска по индексу. Например нужно найти данные у которых значения в столбце меньше на единицу чем аргумент: where col - 1 =@ var При таком поиске придется рассчитывать значение col - 1 для каждой строчки и поиск по индексу использован не будет. Запрос нужно переписать так, что бы значения для предиката высчитывалось один раз и дальше использовалось для поиска...