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