(В моем ответе излагаются первые несколько комментариев, просто для подробностей и некоторого контекста.)
Индексы SQL используются для «поиска» определенных значений. С индексом AD_ARBUM SQL найдет все строки с заданным значением (скажем, 12) почти мгновенно (если, конечно, половина строк таблицы не установлена в 12, и в этом случае вам придется читать половину стол). Ваш фильтр запросов основан на формуле, основанной на нескольких столбцах, ни один из которых не проиндексирован, поэтому необходимо будет прочитать все эти столбцы - по всем 1,2 миллионам строк, чтобы оценить, какие из них включить, а какие - нет. Если вы построили индекс по всем трем столбцам формулы
(AD_SHBETSA, AD_AMBIDSHBETSA, AD_ASKATSHBETSA), ему все равно придется делать одну и ту же математическую формулу для каждого. Если вы построили индекс по самой формуле
CREATE nonclustered INDEX IX_lmoko__ThreeColumnFormula
on lmokok (AD_SHBETSA + AD_AMBIDSHBETSA + AD_ASKATSHBETSA
тогда SQL может искать и фильтровать в зависимости от значения, которое вас интересует, и должен быть намного быстрее (конечно, при условии, что вы не вернете все строки в конце концов.) Недостаток такого индекса это то, что вы должны поддерживать индекс; он займет место, может замедлить вставки и обновления, и если он используется только для запроса, который вы запускаете раз в месяц (а не раз в минуту), это может привести к слишком высокой стоимости производительности и ресурсов.
Кроме того, как указывалось, могут быть и другие факторы: от плохого оборудования до нехватки ресурсов и общего пространства (насколько широкая строка? Сколько столбцов на самом деле задействовано? Эти числовые значения или SQL нужно преобразовать? из строк? Много потенциальных ошибок, о которых мы не можем знать, не глядя на систему)