Я не администратор базы данных ( "Хорошо!", вы сразу подумаете.)
У меня есть таблица данных регистрации данных с этими характеристиками и шаблонами использования:
- Столбец
datetime
для хранения временных меток журнала, значение которых постоянно увеличивается и в основном (но только в основном) уникально - Частые вставки (скажем, дюжина минут), только в конце диапазона временных меток (регистрируются новые данные)
- Нечасто удаляет, навалом, с начала диапазона временных меток (старые данные очищаются)
- Нет обновлений вообще
- Частый выбор выбирается с использованием столбца временной метки в качестве основного критерия наряду со вторичными критериями для других столбцов.
- Нечасто выбирает использование других столбцов в качестве критериев (и не включает столбец временной метки).
- Хорошее количество данных, но нигде не достаточно, что я очень беспокоюсь о пространстве памяти
Кроме того, в настоящее время имеется ежедневное окно обслуживания, в течение которого я мог бы оптимизировать таблицу.
Я, честно говоря, не ожидаю, что эта таблица вызовет вызов сервера, на котором он будет включен, даже если я неверно проиндексирую его, но, тем не менее, это была хорошая возможность запросить некоторый вклад в кластеризованные индексы SQL Server.
Я знаю, что кластеризованные индексы определяют хранение фактических данных таблицы (данные хранятся в листовых узлах самого индекса) и что некластеризованные индексы являются отдельными указателями на данные. Таким образом, в условиях запроса кластеризованный индекс будет быстрее, чем некластеризованный индекс - как только мы найдем значение индекса, данные прямо там. Существуют затраты на вставку и удаление (и, конечно, обновление, изменяющее значение столбчатого индекса столбца, было бы особенно дорогостоящим).
Но я читаю в этом ответе, который удаляет пробелы в разрешении, которые не очищаются до/если индекс не будет восстановлен.
Все это говорит мне, что я должен:
- Поместите кластеризованный индекс в столбец временной отметки со 100% -ным заполняющим фактором
- Поместите некластеризованные индексы в любой другой столбец, который может использоваться в качестве критерия в запросе, который также не включает кластерный столбец (который может быть любым из них в моем случае)
- Запланировать массовые удаления в течение ежедневного периода обслуживания
- Запланировать перестройку кластерного индекса сразу после массового удаления
- Расслабьтесь и выходите больше.
Неужели я там одинок? Нужно ли мне часто перестраивать индекс таким образом, чтобы избежать большого количества потраченного впустую пространства? Есть ли другие очевидные (для DBA) вещи, которые я должен делать?
Спасибо заранее.