你的位置:首页 > 软件开发 > 数据库 > 索引键的唯一性(4/4):非唯一聚集索引上的唯一和非唯一非聚集索引

索引键的唯一性(4/4):非唯一聚集索引上的唯一和非唯一非聚集索引

发布时间:2015-06-14 00:00:56
在上一篇文章里,我谈了唯一聚集索引上的唯一和非唯一非聚集索引的区别。在这篇文章里,我想谈下非唯一聚集索引上的唯一和非唯一聚集索引的区别。我们都知道,SQL Server内部把非唯一聚集索引当作唯一聚集索引处理的。如果你定义了一个非唯一聚集索引,SQL Server会增加叫做uni ...

索引键的唯一性(4/4):非唯一聚集索引上的唯一和非唯一非聚集索引

在上一篇文章里,我谈了唯一聚集索引上的唯一和非唯一非聚集索引的区别。在这篇文章里,我想谈下唯一聚集索引上的唯一和唯一聚集索引的区别。我们都知道,SQL Server内部把唯一聚集索引当作唯一聚集索引处理的。如果你定义了一个唯一聚集索引,SQL Server会增加叫做uniquifier到你的索引记录,它导致你聚集索引的导航结构(B树的非叶子层)里,每条索引行都要用到4 bytes的开销。

下列代码再次创建我们的Customers表,这次在它上面定义唯一聚集索引,最后定义2个聚集索引,1个是唯一的,另1个是非唯一的。

 1 -- Create a table with 393 length + 7 bytes overhead = 400 bytes  2 -- Therefore 20 records can be stored on one page (8.096 / 400) = 20,24  3 CREATE TABLE Customers  4 (  5   CustomerID INT NOT NULL,  6   CustomerName CHAR(100) NOT NULL,  7   CustomerAddress CHAR(100) NOT NULL,  8   Comments CHAR(189) NOT NULL  9 ) 10 GO 11 12 -- Create a non unique clustered index on the previous created table 13 CREATE CLUSTERED INDEX idx_Customers ON Customers(CustomerID) 14 GO15 16 -- Insert 80.000 records 17 DECLARE @i INT = 1 18 WHILE (@i <= 20000) 19 BEGIN 20   DECLARE  @j INT = 1   21   INSERT INTO Customers VALUES 22   ( 23     @i, 24     'CustomerName' + CAST(@i AS CHAR) + CAST(@j AS CHAR), 25     'CustomerAddress' + CAST(@i AS CHAR), 26     'Comments' + CAST(@i AS CHAR) 27   ) 28   29   SET @j += 1; 30   31   INSERT INTO Customers VALUES 32   ( 33     @i, 34     'CustomerName' + CAST(@i AS CHAR) + CAST(@j AS CHAR), 35     'CustomerAddress' + CAST(@i AS CHAR), 36     'Comments' + CAST(@i AS CHAR) 37   ) 38   39   SET @j += 1; 40   41   INSERT INTO Customers VALUES 42   ( 43     @i, 44     'CustomerName' + CAST(@i AS CHAR) + CAST(@j AS CHAR), 45     'CustomerAddress' + CAST(@i AS CHAR), 46     'Comments' + CAST(@i AS CHAR) 47   ) 48   49   SET @j += 1; 50   51   INSERT INTO Customers VALUES 52   ( 53     @i, 54     'CustomerName' + CAST(@i AS CHAR) + CAST(@j AS CHAR), 55     'CustomerAddress' + CAST(@i AS CHAR), 56     'Comments' + CAST(@i AS CHAR) 57   ) 58   59   SET @i += 1 60 END 61 GO62 63 -- Create a unique non clustered index on the clustered table 64 CREATE UNIQUE NONCLUSTERED INDEX idx_UniqueNCI_CustomerID 65 ON Customers(CustomerName) 66 GO 67 68 -- Create a non-unique non clustered index on the clustered table 69 CREATE NONCLUSTERED INDEX idx_NonUniqueNCI_CustomerID 70 ON Customers(CustomerName) 71 GO

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:索引键的唯一性(4/4):非唯一聚集索引上的唯一和非唯一非聚集索引

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录