SQL Server - CLUSTERED


CREATE TABLE dbo.t_MetricBook
(
    MetricSetID        smallint      NOT NULL,
    BookID             smallint      NOT NULL,
    ReportingCcyAmount decimal(18,2) NOT NULL,
    CONSTRAINT PK_t_MetricBook
    PRIMARY KEY CLUSTERED (MetricSetID,BookID)
)

解釋:
CONSTRAINT PK_t_MetricBook PRIMARY KEY CLUSTERED (MetricSetID,BookID)

CONSTRAINT :創建約束
PK_t_MetricBook:主鍵的名稱
PRIMARY KEY: 表明創建的是主鍵約束
CLUSTERED :表示索引類型是聚集索引

---------------------------------------

詳細介紹
在創建Table設定主鍵的時候,SQL Server會自動創建一個對應的Clustered Index。如果使用Microsoft SQL Server Management Studio工具,發現這個Clustered Index只能刪除,不能通過界面進行修改。這讓人誤以為在主鍵上只能建立Clustered Index, 實際上卻不是這樣的。

   如果通過Script 創建,我們可以指定在主鍵上建立Clustered / Non-Clustered Index。示例如下:

CREATE TABLE [dbo].[table_1](
    [id] [int] NOT NULL,
PRIMARY KEY 
(
    [id] ASC
))
 
CREATE TABLE [dbo].[table_2](
    [id] [int] NOT NULL,
PRIMARY KEY NONCLUSTERED 
(
    [id] ASC
))

table_1 上將默認建立Clustered Index, table_2則建立的是Non Clustered Index。


對於已經建立主鍵的Table,如果要改成Non Clustered Index, 可以先刪除主鍵,再重新創建成Non Clustered Index

ALTER TABLE [dbo].[table_1]DROP CONSTRAINT PK__table_1__3213E83F3C0AD43D
go
ALTER TABLE [dbo].[table_1] ADD CONSTRAINT PK__table_1__3213E83F3C0AD43D 
    PRIMARY KEY NONCLUSTERED (id)
go

在創建Table的時候,也可以同時設定一個欄位為主鍵,而另外一個欄位是Clustered index.

CREATE TABLE [dbo].[table_3]
(id INT NOT NULL PRIMARY KEY,
col1 INT NOT NULL UNIQUE CLUSTERED)
go


綜上所述,主鍵只是一個Constraint, 主鍵上能夠建立Clustered / Non-Clustered Index,  當然通用的最佳實踐是把主鍵創建為Clustered Index--------------------- 
作者:Cassaba 
來源:CSDN 
原文:https://blog.csdn.net/cassaba/article/details/52043058 
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM