問題描述
有人可以簡化向列添加唯一約束的解釋嗎?創建鍵索引時,SQL SERVER 是復制行中的所有信息并將其添加到索引中,還是僅將列中的數據添加到應用了 UNIQUE CONSTRAINT 的數據中?
Could someone simplify the explanation of adding a UNIQUE CONSTRAINT to a column please. When creating the key index does SQL SERVER copy ALL of the information in the row and add it to the index or just the data in the column with the applied UNIQUE CONSTRAINT?
我希望我能正確解釋.
任何幫助將不勝感激.
李.
I hope I explained that properly.
Any help will be greatly appreciated.
Lee.
編輯**
好吧,我想我明白了嗎?
Ok i think i get it?
CREATE TABLE dbo.test
(
Id int NOT NULL,
Name char(10) NOT NULL UNIQUE
);
INSERT INTO dbo.test (id, name) VALUES (1, 'Lee')
INSERT INTO dbo.test (id, name) VALUES (2, 'Paul')
INSERT INTO dbo.test (id, name) VALUES (3, 'Adam')
INSERT INTO dbo.test (id, name) VALUES (4, 'Henry')
在聚集索引中,整個表將像這樣排序
In a clustered index the whole table would be sorted like
3, Adam
4, Henry
1, Lee
2, Paul
那么,每增加一個 INSERT,服務器就必須根據 name 列對整個表重新排序?
So with each additional INSERT the server would have to re-sort the entire table based on the name column?
在非聚集索引中還有另一個表"存儲排序?
In a nonclustered index there is another "table" that stores the sort?
推薦答案
UNIQUE CONSTRAINT
將與 UNIQUE INDEX
一樣工作.有兩種方式:
UNIQUE CONSTRAINT
will work just as UNIQUE INDEX
. There are 2 ways:
使用
聚集索引
,行以與索引相同的順序物理存儲在磁盤上.(因此,只有一個聚集索引是可能的)
With a
clustered index
the rows are stored physically on the disk in the same order as the index. (hence, only one clustered index is possible)
對于非聚集索引
,還有一個指向物理行的指針的第二個列表.您可以擁有多個非聚集索引,盡管每個新索引都會增加寫入新記錄所需的時間.
With a non clustered index
there is a second list that has pointers to the physical rows. You can have many non clustered indexes, although each new index will increase the time it takes to write new records.
如果您同時擁有聚集索引和非聚集索引,那么非聚集索引將指向聚集索引列.
If you have both clustered and non clustered index, then non clustered index will point to the clustered index column.
這個'SO' 回答會幫助你理解得更清楚一些.
THIS 'SO' answer will help you understand it a bit clear.
默認情況下,唯一約束和唯一索引將創建一個非如果您沒有指定任何不同的聚集索引(并且 PK 將通過如果沒有沖突的聚集索引,則默認創建為 CLUSTERED存在)但您可以為任何顯式指定 CLUSTERED/NONCLUSTERED其中.
By default the unique constraint and Unique index will create a non clustered index if you don't specify any different (and the PK will by default be created as CLUSTERED if no conflicting clustered index exists) but you can explicitly specify CLUSTERED/NONCLUSTERED for any of them.
這篇關于SQL SERVER:唯一約束說明的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!