На мой взгляд, нет статического ответа, такого рода вещи подпадают под «настройку производительности».
Может случиться так, что все, что делает ваше приложение, просматривается первичным ключом, или это может быть противоположностью тому, что запросы выполняются для неограниченных комбинаций полей, и любое из них может быть использовано в любой момент времени.
Помимо индексирования, существует реорганизация вашей БД для включения вычисляемых полей поиска, таблиц разбиения и т. Д. - это действительно зависит от ваших форм загрузки и параметров запроса, от того, сколько / какие данные «действительно» необходимо повторно обработать запросом. 1005 *
Если перед всей вашей БД стоят фасады хранимых процедур, то повороты становятся немного проще, поскольку вам не нужно беспокоиться о каждом специальном запросе. Или у вас может быть глубокое понимание того, какие запросы будут попадать в вашу БД, и можете ограничить их настройку.
Для SQL Server я нашел советника по настройке ядра СУБД полезным - вы устанавливаете «типичные» рабочие нагрузки, и он может давать рекомендации по добавлению / удалению индексов и статистики. Я уверен, что другие БД имеют аналогичные инструменты, «официальные» или сторонние.