cor*_*iKa 11 mysql constraint derby unique-constraint
如果我unique
对某个字段进行约束,是否还需要在该字段上创建索引以获得可扩展的插入时间?或者这是为我完成的(即使它使用的索引不可公开访问?)
具体来说,我正在使用 Apache Derby 进行原型设计,尽管我可能会在半不久的将来将其移至 MySQL。我也希望 SQL 标准中可能有一些关于这一点的内容。
我永远不需要按这个字段搜索,所以我宁愿不做一个无用的索引。但我宁愿有一个无用的索引,也不愿有一个O(n)
插入时间。
主键 >= 唯一 >= 索引 == 键
InnoDB数据是按PK排序的。MyISAM PK 的作用与 UNIQUE 相同。
INSERT 必须向您拥有的每个索引(任何类型)添加一个“行”。这需要一些时间。(通常,时间不够重要。)索引全部以 BTree 格式存储。MyISAM BTree 块为 1KB;InnoDB 使用 16KB。
插入InnoDB同时更新PK和数据。
插入 MyISAM 通常会将数据“追加”到.MYD
. 它单独向 PK(如果有)添加一行。
INSERT 必须首先验证任何 PRIMARY 或 UNIQUE 键没有重复键。这是通过使用索引来完成的。因此,为什么 UNIQUE 和 FOREIGN KEY CONSTRAINT 真正构建了索引。这是 O(logN),但通常是 CPU,而不是 I/O,因为缓存效率很高。