Индексы реализуют компромисс между пространством и временем.Индекс для каждого столбца
- занимает больше места на диске,
- ускоряет некоторые операторы SELECT, а
- замедляет некоторые операторы INSERT, UPDATE и DELETE (посколькуБД должны поддерживать как индекс, так и строку).
Очень мало пользовательских запросов выберут случайный набор столбцов из вашей таблицы.Вы, вероятно, обнаружите, что два или три столбца есть почти в каждом запросе.Какой-то индекс для этих столбцов ускорит все запросы, которые их используют.Хороший обработчик запросов будет использовать индексы, чтобы изолировать подмножество всех строк, а затем выполнить последовательное сканирование на этом подмножестве для всех неиндексированных столбцов в предложении WHERE.
Зачастую это достаточно быстро для всех.(Тестируйте, не предполагайте.)
Если это не достаточно быстро для всех, вы изучаете планы выполнения запросов и шаблоны пользовательских запросов, проводите некоторые измерения производительности, добавляете еще один индекс и спрашиваете себя,может жить с результатами.Каждый дополнительный индекс будет занимать дисковое пространство, ускорять некоторые операторы SELECT и замедлять некоторые операторы INSERT и DELETE.(Пользователи не часто замечают, как операторы INSERT, UPDATE и DELETE замедляются; обычно они не сильно замедляются.)
В какой-то момент вы можете обнаружить, что SELECTers начинают жаловатьсяо вставках и наоборот.Если вы не готовы рассмотреть более агрессивные улучшения производительности
- более быстрое оборудование,
- настройка сервера,
- перемещение некоторых таблиц или индексов на более быстрые диски,
- возможно, даже переходя на другую базу данных,
теперь у вас есть политическая проблема, а не техническая.