虽然我理解在一个唯一列上有一个索引非常方便 - 为了轻松有效地检查值冲突,我认为应该由程序员来指定一个唯一的字段列是否有索引或者不是,关于尺寸与速度的优化。
据我所知,MySQL自动索引指定为唯一的表列。是这样吗?
有没有什么理由MySQL似乎不能拥有没有索引的唯一列?是的,每个值插入/更新都将是O(number_of_rows)操作而没有一个,但就像我说的那样,程序员不应该对这个决定征税吗?
好奇!
答案 0 :(得分:11)
据我所知,MySQL自动索引指定为唯一的表列。是这样吗?
是。但它并不一定是“自动的”,而是隐含的。 UNIQUE
是索引的类型,所以当然该列已编入索引。
有没有什么理由MySQL似乎不能拥有没有索引的唯一列?
因为MySQL对每个INSERT
/ UPDATE
执行全表扫描以维护唯一约束是愚蠢的。
修改强>:
是的,每个值插入/更新都将是O(number_of_rows)操作而没有一个,但就像我说的那样,程序员不应该对这个决定征税吗?
为什么程序员想要在数据存储层之外手动强制执行基本数据完整性?我明白你要去哪里,但事实是索引不可能伤害任何东西(它只需要更多的空间) - 所以真的没有决定考虑。