Просто позвоните с несколькими комментариями.
SQL Server имеет тенденцию к сканированию таблиц, даже если индекс присутствует, если он не считает, что поле «Поиск» имеет мощность менее 1%. Учитывая это, в индексе битового поля никогда не будет никакого значения. (мощность 50%!)
Один из вариантов, который вы можете рассмотреть, - это создание фильтрованного индекса (WHERE Field05 = 0). Затем вы можете включить другие поля в этот индекс.
Обратите внимание, что это поможет вам, только если вы не выбираете другие столбцы из таблицы.
Можете ли вы проверить, какая доля ваших данных имеет Field5 = 0? - Если это мало (например, менее 10%), тогда может помочь отфильтрованный индекс.
Я не вижу способа, чтобы вы могли избежать какого-либо сканирования - лучшее, что вы можете получить, это, вероятно, сканирование индекса.
Другой вариант (по сути то же самое!) - создать индексированное представление с привязкой к схеме со всеми необходимыми столбцами и жестко закодированным в поле фильтром field5 = 0.
Опять же - Если вы не уверены, что список выбранных столбцов будет составлять ничтожную долю столбцов в таблице, SQL, вероятно, будет быстрее при сканировании таблицы. Если вы выбираете только несколько столбцов из очень широкой таблицы, то может помочь индекс, охватывающий эти столбцы, хотя даже при сканировании будет больше строк на страницу, чем при сканировании полной таблицы.
Итак, подведем итог - если вы можете гарантировать, что будет выбрано небольшое подмножество таблицы, столбцы
И field5 = 0 представляет меньшинство ваших строк в таблице, тогда может быть полезен отфильтрованный индекс с включениями.
EG
СОЗДАТЬ НЕКЛАСТЕРНЫЙ ИНДЕКС ix ON dbo.Aziende (ID) ВКЛЮЧИТЬ (Field01, Field02, Field03, Field04, [другие столбцы, используемые для выбора]) WHERE (field5 = 0)
Удачи!