a';独特的';列字段表示MySQL的索引,如果是,为什么?

a';独特的';列字段表示MySQL的索引,如果是,为什么?,mysql,optimization,database,Mysql,Optimization,Database,虽然我知道在一个唯一的列上有一个索引是非常方便的,以便轻松有效地检查值冲突,但我认为应该由程序员指定一个唯一的字段列是否有索引,以及大小与速度的优化 据我所知,MySQL会自动为指定为唯一的表列编制索引。是这样吗 MySQL似乎不能有没有索引的唯一列,这有什么原因吗?是的,每个值插入/更新都是O(行数)操作,没有一个,但是正如我所说的,程序员不应该为这个决定付出代价吗 只是好奇 据我所知,MySQL会自动为指定为唯一的表列编制索引。是这样吗 对。不过,这不一定是“自动”的,而是隐含的UNIQUE

虽然我知道在一个唯一的列上有一个索引是非常方便的,以便轻松有效地检查值冲突,但我认为应该由程序员指定一个唯一的字段列是否有索引,以及大小与速度的优化

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

MySQL似乎不能有没有索引的唯一列,这有什么原因吗?是的,每个值插入/更新都是O(行数)操作,没有一个,但是正如我所说的,程序员不应该为这个决定付出代价吗

只是好奇

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

对。不过,这不一定是“自动”的,而是隐含的
UNIQUE
是索引的类型,所以当然该列是索引的

MySQL似乎不能有没有索引的唯一列,这有什么原因吗

因为MySQL在每个
INSERT
/
UPDATE
上进行一次完整的表扫描以维护唯一约束是愚蠢的

编辑

是的,每个值插入/更新都是O(行数)操作,没有一个,但是正如我所说的,程序员不应该为这个决定付出代价吗


为什么程序员希望在数据存储层之外手动强制执行基本数据完整性?我知道你要做什么,但事实是索引不可能伤害任何东西(它只占用了一点空间)-所以确实没有一个要考虑的决定。

事实上,使用DBMS的一个原因是保持数据完整性。数据完整性和数据索引,即使是相关的,也是两个正交概念,不是吗?我相信是的。大多数时候,数据完整性的解决方案并不像这种特殊情况那样优雅。很多时候,它归结为必须进行物理检查,以确保本应存在的数据确实存在。当然,这也取决于RDM、外键支持、键约束等。