MySQL:无索引的唯一约束

10

是否可以添加类似于以下约束条件:

ALTER TABLE `t1` ADD UNIQUE(`col1`, `col2`);

不创建索引会怎样?如果没有任何查询使用该索引,那么它将浪费空间。

如果插入和更新变得更慢,因为表格很少被更新,这并不是一个问题。


2
https://dev59.com/pmkw5IYBdhLWcg3wm74h - Jason Heo
谢谢。我在每一列上都有一个索引。通过提供的链接,我了解到如果有唯一约束,则不需要col1索引,因此我至少可以删除它。通过对列进行唯一索引以防止重复仍然感觉像是一种变通方法。 - COMMANDER CAPSLOCK
1个回答

15
不,这是不可能的。唯一约束包含索引定义,我几乎无法想象在不创建索引(在DBMS术语中)的情况下如何实现它。
你应该意识到索引不仅仅是“巫术” - 它们是一种真正的数据结构,需要空间来放置,需要特殊的程序来处理等等。唯一约束本身意味着唯一索引值,而不是唯一列值。

1
此外,如果数据库要保证/保护某列的唯一性,它似乎需要快速访问该列中的所有值以检查插入或更新操作中是否存在相同的值。我并不是DBMS专家,但索引可以提供这种快速访问。 - xdhmoore
1
不是完全这样,但你说得对。索引是必需的,因为要达到唯一性需要检查B树,而这需要索引 - 如果我们谈论的是B树索引。 - Alma Do

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接