在SQL Server 2005+(我同时使用)中,是否将UNIQUE
约束添加到列自动创建索引,还是应该仍然CREATE INDEX
?是否使列独一无二强制创建索引?
4
A
回答
8
看到这个MSDN article:
数据库引擎会自动 创建唯一索引来强制UNIQUE 约束的 唯一性要求。
如果你创建一个索引,你会拥有两个指标,因为这个例子演示:
create table TestTable (id int)
alter table TestTable add constraint unique_id unique (id)
create unique index ix_TestTable_id on TestTable (id)
select * from sys.indexes where [object_id] = object_id('TestTable')
这将在TestTable的显示两个唯一索引;和代表表格本身的HEAP。
1
当您添加唯一约束创建索引:
Reference - 见第二段。
当一个UNIQUE限制添加到 在 表中现有列或多列,默认情况下,数据库引擎 检查该 列中的现有数据,以确保所有值都 独特。如果将一个唯一约束 添加到重复值为 的列中,那么数据库引擎将返回一个 错误并且不会添加约束。
数据库引擎自动创建一个UNIQUE索引,以强制执行UNIQUE 约束的 唯一性要求。因此,如果尝试执行 来插入重复行,则 数据库引擎会返回错误 消息,指出违反了UNIQUE 约束条件,并且 不会将该行添加到表中。除非指定 聚簇索引明确指定为 ,否则默认情况下会创建唯一的非聚簇 索引以强制使用UNIQUE约束 。
2
是的,它的确如此。
事实上,你甚至可以创建一个CLUSTERED UNIQUE CONSTRAINT
:
ALTER TABLE mytable ADD CONSTRAINT UX_mytable_col1 UNIQUE CLUSTERED (col1)
,这将使要在col1
聚集表。
几乎所有数据库都会为UNIQUE CONSTRAINT
创建一个索引,否则很难维护它。
Oracle
甚至没有区分UNIQUE CONSTRAINT
和UNIQUE INDEX
:一个命令只是另一个命令的同义词。
在Oracle
唯一的区别是,UNIQUE INDEX
应该有一个用户提供的名称,而一个UNIQUE CONSTRAINT
可以与系统生成的名称来创建:
ALTER TABLE mytable MODIFY col1 UNIQUE
这将创建称为SYS_CXXXXXX
的索引。
相关问题
- 1. Oracle是否自动为FOREIGN KEY列创建二级索引?
- 2. Android Build Model Number是否独一无二?
- 3. 在临时表列上创建索引是否唯一?
- 4. 是否创建一个FK自动索引列?
- 5. 是否可以为多个列创建一个索引? hiberanate
- 6. MySQL是否在创建新索引时使用现有索引?
- 7. 索引创建是否可以使用现有索引?
- 8. 在列上创建唯一约束是否自动创建索引?
- 9. 创建一个jQuery索引来遍历单独的列表
- 10. 创建索引列
- 11. 如何使多列独一无二yii2
- 12. 使用hashlib.sha256创建唯一的ID;这保证是独一无二的吗?
- 13. 是否可以在Sybase中动态强制索引使用?
- 14. 为ORDER BY强制索引使用是否更好?
- 15. 写入后优化lucene索引是否是强制性的?
- 16. 是否可以在索引上创建索引?
- 17. 制作索引创建类
- 18. ElasticSearch无法创建索引
- 19. 在每组列上创建索引或为每列创建单独的索引,哪个更好?
- 20. 是否用于创建表索引的列隐含地为UNIQUE?
- 21. 创建外键是否意味着创建索引?
- 22. numpy独一无二总是一样吗?
- 23. Cassandra 1.1.2创建二级索引失败
- 24. 强制Nexus更新/创建存储库索引
- 25. 是否有工具查看使用二进制序列化创建的文件?
- 26. Allegro CL:创建一个独立的二进制文件?
- 27. 是否可以使用Objectify创建降序索引?
- 28. 是否可以使用PHP和HTML创建搜索引擎?
- 29. 独特索引中的领先列是否有所作为?
- 30. 我是否需要在SUM(col)使用的列上创建索引?
当您使某一列唯一时,如果该列已被编入索引,Oracle将不会创建唯一索引 - 因为它可以使用非唯一索引警告唯一约束(尽管通常不建议这样做)。 – 2009-05-26 02:02:22