Первый шаг - понять, как будут использоваться данные в таблице: как они будут вставлены, выбраны, обновлены, удалены. Не зная ваших моделей использования, вы стреляете в темноте. (Обратите также внимание, что, что бы вы ни предлагали сейчас, вы можете ошибаться. Обязательно сравните свои решения с фактическими моделями использования, как только вы приступите к работе.) Некоторые идеи:
Если пользователи часто будут искать отдельные элементы в таблице, индекс первичного ключа имеет решающее значение.
Если данные будут вставляться с большой частотой и у вас будет несколько индексов, со временем вам придется столкнуться с фрагментацией индекса. Ознакомьтесь с кластерными и некластеризованными индексами и фрагментацией и изучите их (ALTER INDEX ... REBUILD).
Но, если производительность является ключевой в ситуациях, когда вам нужно извлечь много строк, вы можете рассмотреть возможность использования вашего кластерного индекса для поддержки этого.
Если вам часто требуется набор данных, основанный на статусе, индексация по этому столбцу может быть хорошей, особенно если 1% ваших строк «Активен» против 99% «Не активен», и все, что вам нужно, это активные.
И наоборот, если ваш «PriorityId» используется только для получения «метки», указывающей, что такое PriorityId 42 (то есть соединение с таблицей поиска), вам, вероятно, не нужен индекс для него в основной таблице.
Последняя идея: если каждый всегда будет извлекать данные только для одной Компании за раз, то (а) вы определенно захотите проиндексировать это, и (б) вы можете рассмотреть возможность разделения таблицы по этому значению , так как он может действовать как «встроенный фильтр» сверх обычной индексации. (Возможно, это немного экстремально и доступно только в редакции Enterprise, но в вашем случае оно того стоит.)