Если вы ищете производительность, индексы - это путь. Индексы ускоряют ваши запросы. Если у вас 7 миллионов записей, ваши запросы, вероятно, занимают много секунд в минуту, в зависимости от объема вашей памяти.
Вообще говоря, я бы создал индексы, которые соответствуют наиболее частым операторам SELECT. Все говорят о негативном влиянии индексов на размер и скорость таблицы, но я бы пренебрег этим влиянием, если только у вас нет таблицы, для которой вы выполняете вставки и обновления в 95% времени, но даже тогда, если эти вставки происходят ночью и вы запрашиваете в течение дня зайдите и создайте эти индексы, ваши пользователи в дневное время оценят это.
Каково фактическое влияние времени на оператор вставки или обновления, если есть дополнительный индекс, может быть 0,001 секунды? Если индекс экономит много секунд на каждый запрос, я думаю, дополнительное время, необходимое для обновления индекса, того стоит.
Единственный раз, когда у меня возникали проблемы с созданием индекса (это фактически нарушало логику программы), было то, когда мы добавляли первичный ключ в таблицу, которая была ранее создана (кем-то другим) без первичного ключа, и программа ожидая, что оператор SELECT возвращает записи в той последовательности, в которой они были созданы. Создание первичного ключа изменило то, что записи при выборе без какого-либо предложения WHERE были возвращены в другой последовательности.
Во-первых, это явно неправильный дизайн, тем не менее, если у вас более старая программа и вы сталкиваетесь с таблицами без первичного ключа, я предлагаю на всякий случай взглянуть на код, который читает эту таблицу, прежде чем добавлять первичный ключ.
Еще одна последняя мысль о создании индексов, выбор полей и последовательность, в которой поля появляются в индексе, влияют на производительность индекса.