У меня есть база данных внутреннего сервера SQL. Насколько я понимаю, кластерные индексы наиболее эффективны, но они физически упорядочивают страницы, чтобы сделать их эффективными. Таким образом, если это поле, введенное пользователем, каждый раз, когда добавляется новая запись, вся таблица должна сама себя реструктурировать.

Это не может быть эффективным. Итак, эффективен ли в этом случае регулярный индекс для поля? или вы просто оставили бы его неиндексированным?

1 ответ1

1

Как правило, вы должны использовать кластерные индексы только для полей Identity, и автономные номера являются лучшими, поскольку они постоянно растут. Обновление столбца идентификаторов - это то, что вы должны делать раз в тысячелетия, и, разумеется, не во время выполнения приложения, поэтому вам никогда не придется переупорядочивать содержимое страницы с помощью стандартного оператора DML.

Внутри этих ограничений кластерные индексы очень эффективны, но, как вы указали, при неправильном использовании они могут существенно снизить производительность для операторов DML в индексированном поле.

Таким образом, короткий ответ, не используйте кластерные индексы для пользовательских введенных полей.

Что касается некластеризованных индексов, они могут быть главным благом или предостережением, в зависимости от их использования. NCI очень хороши для получения одной или небольшого количества строк, но размер индекса увеличивается с каждым добавленным к нему полем, поэтому сложные индексы с несколькими полями или индексы, которые могут разрешить запрос только к большому количеству строк в по крайней мере, не обеспечивают выгоды, и часто являются большим сопротивлением, чем они стоят.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .