回答

收藏

SQL Server 2008年唯一的键和索引

技术问答 技术问答 487 人阅读 | 0 人回复 | 2023-09-14

我有一个表叫表,countries并country_name通过在SQL Server 2008 R2上创建类型为“ nique Key”的“/ h/ N/ n# O- r& |; P3 T2 ?
nnddex / Key将列定义为唯一。; Z/ @/ c0 T( X3 E/ W- O
但是我有以下问题:
% y6 n5 L. A  H3 ~" q4 S; N[ol]创建“ nique密钥类型的泪痕/密钥会自动在这一列中创建非聚集索引吗?
; }% K0 q- w/ l/ K  b6 T3 u假如我把类型从唯一键改为索引IsUnique如果价值保留为是,会有区别吗?. n6 f* P% l* ^5 X) B. B
所以为什么我有两个选项 nique Key”和“ Index是一样的?[/ol]                                                               
) q6 ~' G0 N5 {6 {3 q! ?' c9 `    解决方案:                                                                / ]0 h+ i7 S8 [
                                                                幕后唯一的约束是唯一的索引,所以如何指定它并不重要。我倾向于简单地实现它:
2 @6 ~: b8 G( _& |ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);例如,有些人创建了唯一的索引,
; \( _9 f  J( B; S5 hCREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);区别在于目的-
3 j+ O8 L7 A5 S0 C+ y4 J2 a如果创建约束强制执行独特性/业务规则,则创建约束。如果这是为了提高查询性能,创建唯一的索引可能更合乎逻辑。同样,幕后也是如此,但你到达那里的路可能有助于记录你的意图。4 f1 T% A6 |, t) Y8 g% g4 c9 x9 m
在我看来,有很多选择可以遵循以前的选择Sybase功能,也可以遵循ANSI标准(即使唯一的约束不符合标准1000)%,因为它们只允许一个NULL值-5 ^3 q/ y: M+ q. @% h0 q9 I. A( q
另一方面,唯一的索引可以通过SQL Server添加 2008及更高版本WHERE子句(WHERE col IS NOTNULL)解决这个问题。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则