mysql - 决定使用 KEY 还是 UNIQUE KEY

标签 mysql indexing unique-index

我理解UNIQUE KEY是唯一索引,KEY是非唯一索引。我读过,在唯一索引的情况下插入数据可能会导致一些 IO。

如果我们不必依赖数据库来实现唯一性,并且仍然希望使用列“b”进行快速查找,您会建议使用非唯一索引(KEY)而不是唯一索引(UNIQUE KEY) ?

最佳答案

唯一索引和非唯一索引都会导致 INSERTDELETEUPDATE 语句的 I/O 操作。索引开销的量应该几乎相同。不同的是,在正常使用情况下,唯一索引可能会导致INSERTUPDATE失败(当然,也可能因为其他原因,比如磁盘满了而失败) ,但这是一种不寻常的情况)。

我不明白这句话:“如果我们不必依赖数据库来实现唯一性”。表中的UNIQUE属性是对构成键的一列或多列的描述。数据库的功能之一就是维护数据的完整性,所以让数据库做它设计的事情。

至于性能,我认为唯一索引和非唯一索引之间没有显着差异。对于某些操作,唯一索引可能会稍微优化一些,因为编译器知道单次查找仅返回一行。在实践中,索引查找和返回一行的索引扫描之间的差异可能非常小。

关于mysql - 决定使用 KEY 还是 UNIQUE KEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817901/

相关文章:

mysql - Hibernate 的 hbm2ddl 不适本地创建唯一索引的问题

oracle - h2 数据库上的条件唯一索引

mysql - 创建触发器时出现语法错误

postgresql - Postgres 中 LIMIT 如何通过主键与 DELETE 交互? (修复损坏的唯一索引)

python - 通过 multiindex 将 Series 分配给 DataFrame

sql - 在非不同索引上使用递归 cte 计算不同行

mysql - 如何获取mysql查询中每条记录的计数

mysql - JOIN 语句中的 SQL 问题

java - 如果tomcat使用数据源,由tomcat启动的mysqldump导致OutOfMemoryError

c++ - 迭代器循环与索引循环