日期:2014-05-18  浏览次数:20474 次

建立惟一性时,建立索引与建立约束有什么区别呀。(有图)
建立惟一性时,建立索引与建立约束有什么区别呀。(有图)
----------------
有时一个字段虽然不是主键,但也要求具有惟一性,所以要设置,可是我发现设置惟一性时,有两个选择,一个是索引,一个是约束,我不知二者有何本质区别,图如下:



------解决方案--------------------
约束
约束使您得以定义 Microsoft® SQL Server? 2000 自动强制数据库完整性的方式。约束定义关于列中允许值的规则,是强制完整性的标准机制。使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。


索引
数据库中的索引与书籍中的索引类似。在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是一个表中所包含的值的列表,其中注明了表中包含各个值的行所在的存储位置。可以为表中的单个列建立索引,也可以为一组列建立索引;索引采用 B 树结构。索引包含一个条目,该条目有来自表中每一行的一个或多个列(搜索关键字)。B 树按搜索关键字排序,可以在搜索关键字的任何子词条集合上进行高效搜索。


------解决方案--------------------
谢谢老师指教, 
两个词的意思我也看过,就是不太明白. 
举个例子吧. 
我想实现某字段的值,不充许有重复值.(注,这个字段不是主键), 
我想问,是用约束好呀,还是索引好呀?哪种性能会更好些. 

我想建的列其实就是一个自增列,做为惟一值用,用于修改或删除记录时,标识一条惟一的记录. 

在客户端程序中处理时,要删除哪条记录,要修改哪条记录,必须要由某一个字段的值来标识的.所以这个字段必须有惟一性,所以我建了一个自增字段,但是我一定要保证这个自增字段的惟一性.用约束好呀,还是用索引好呀? 
谢谢. 
-------------------------------------------------------
当然是约束好,因为你是需要删除和修改的,如果用索引是占资源的。
聚集索引只能建一个。在数据只有查找时可以在列上建军非聚集索引(可以多个)。
------解决方案--------------------
建立索引与建立唯一约束没什么区别的,只是两个使用的语法和权限不一样,建立约束需要Alter Table 的权限,而建立索引的权限相对小一点,而且索引可以禁用,但是唯一约束不能禁用,就这么点区别


约束也是利用索引的机制实现的,所以无论建那个效果是一样的
------解决方案--------------------
这种情况下使用实体完整性的标识列identity,即约束
索引经常被用于提高数据库的性能与速度上