MySQL:“唯一”列字段是否意味着索引,如果是,为什么?

时间:2010-06-27 15:08:34

标签: mysql optimization database

虽然我理解在一个唯一列上有一个索引非常方便 - 为了轻松有效地检查值冲突,我认为应该由程序员来指定一个唯一的字段列是否有索引或者不是,关于尺寸与速度的优化。

据我所知,MySQL自动索引指定为唯一的表列。是这样吗?

有没有什么理由MySQL似乎不能拥有没有索引的唯一列?是的,每个值插入/更新都将是O(number_of_rows)操作而没有一个,但就像我说的那样,程序员不应该对这个决定征税吗?

好奇!

1 个答案:

答案 0 :(得分:11)

  

据我所知,MySQL自动索引指定为唯一的表列。是这样吗?

是。但它并不一定是“自动的”,而是隐含的。 UNIQUE是索引的类型,所以当然该列已编入索引。

  

有没有什么理由MySQL似乎不能拥有没有索引的唯一列?

因为MySQL对每个INSERT / UPDATE执行全表扫描以维护唯一约束是愚蠢的。

修改

  

是的,每个值插入/更新都将是O(number_of_rows)操作而没有一个,但就像我说的那样,程序员不应该对这个决定征税吗?

为什么程序员想要在数据存储层之外手动强制执行基本数据完整性?我明白你要去哪里,但事实是索引不可能伤害任何东西(它只需要更多的空间) - 所以真的没有决定考虑。