详解MySQL的字段默认null对唯一索引的影响
目录 正文 看一下为何唯一索引为影响insert速度 MySQL版本:在docker中启动一个mysql 假设只存在邮箱注册: insert数据 经验 正文 在日常业务开发中,会经常遇到需要保证唯一性的数据业务
目录正文看一下为何唯一索引为影响insert速度MySQL版本:在docker中启动一个mysql假设只存在邮箱注册:insert数据经验<p></p>
正文
在日常业务开发中,会经常遇到需要保证唯一性的数据业务,如用户注册业务。一般注册业务中允许用户以手机号或email注册账号,且需要保证唯一,不允许重复注册。当用户输入手机号或email登录时,程序会判定输入信息的存在与否性,存在则走登录,不存在则走注册。而保证唯一性就不仅仅需要在程序端做判断,还需要MySQL的唯一索引去做最后一道防线。那么唯一索引在一些业务中使用,如果唯一索引字段中默认值设置为了null,会造成什么后果呢?
在阿里的《阿里巴巴Java开发手册》中关于MySQL-索引规范中写道: 【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须创建唯一索引。
说明:
不要以为唯一索引影响了insert速度,这个速度的损耗可以忽略不计,但提高查找的速度是明显的;
另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。
看一下为何唯一索引为影响insert速度
在MySQL中,唯一索引树是一个非聚簇索引,每次插入数据时,都会在唯一索引树上进行遍历查找该插入值是否唯一,这也就是为什么会影响insert的速度,因为多一步遍历判断唯一性。