Часто мне нужно выполнять запросы к большим таблицам, которые не имеют нужного индекса. Поэтому я прошу администратора баз данных создать такой индекс. Первое, что он делает, это просматривает статистику таблицы и видит размер пространства индекса.
Часто он говорил мне найти альтернативное решение, потому что «индекс уже больше, чем таблица». Он считает, что индекс должен быть меньше данных, потому что он сказал мне: «Вы когда-нибудь видели индекс в книге? Он намного меньше, чем сама книга, и именно таким должен быть индекс таблицы».
Я не чувствую, что его философия верна, но я не могу бросить ему вызов, потому что он ведущий администратор баз данных и я разработчик. Я чувствую, что если запросу нужен индекс, индекс должен быть просто создан, вместо того, чтобы находить «обходные пути», которые просто делают нечитаемые и не поддерживаемые SP.
Я выбираю только необходимые столбцы. Проблема в том, что я фильтрую по дате, поэтому движок обязательно выполнит сканирование таблицы, чтобы соответствовать столбцам. Запрос выполняется один раз в день, ночью, для сбора статистики, но для его выполнения требуется 15 минут (у нас есть другое жесткое и быстрое правило: ни одна процедура не должна занимать более 3 минут).
Администратор БД показал мне статистику индекса. В этой таблице было около 10 индексов, из которых использовались только 6 (статистика показала ноль хитов по 4 из них). Это большая система с участием более 20 разработчиков. Индексы были созданы по любой причине и, вероятно, больше не используются.
Мы обязаны поддерживать SQL Server 2008, поскольку именно на этом работают тестовые БД. Но клиенты все на 2014 и 2016.