Ответ 1
Нет, он может быть некластеризованным. Однако, если вы явно не определяете его как некластеризованное, и в таблице нет кластерного индекса, он будет создан как кластеризованный.
Пожалуйста, уточните мои сомнения по этому поводу. В SQL Server (2000 и выше) первичный ключ автоматически индексируется кластером или у нас есть выбор, чтобы иметь некластеризованный индекс для первичного ключа?
Нет, он может быть некластеризованным. Однако, если вы явно не определяете его как некластеризованное, и в таблице нет кластерного индекса, он будет создан как кластеризованный.
Можно также добавить, что часто это BAD, чтобы первичный ключ был кластеризован. В частности, когда первичный ключ назначается IDENTITY, он не имеет внутреннего смысла, поэтому любые попытки сохранить таблицу, расположенную соответственно, будут потеряны.
Рассмотрим таблицу продукта, с основным ключом ProductID INT IDENTITY. Если это сгруппировано, то продукты, которые каким-то образом связаны, скорее всего, будут распространяться по всему диску. Возможно, лучше скопировать что-то, на что мы, скорее всего, будем запрашивать, например, идентификатор производителя или код категории. В любом из этих случаев кластеризованный индекс (при прочих равных условиях) делает соответствующий запрос более эффективным.
С другой стороны, внешний ключ дочерней таблицы, указывающий на это, может быть хорошим кандидатом для кластеризации (мое возражение относится к столбцу, на самом деле имеющему атрибут IDENTITY, а не его родственникам). Таким образом, в моем примере выше, вероятно, что ManufacturerID является внешним ключом в таблице производителя, где он установлен как идентификатор. Этот столбец не должен кластеризоваться, но столбец в Product, который ссылается на него, может сделать это с хорошим преимуществом.