可靠性不高

存在自增 ID 回溯的问题,这个问题直到最新版本的 MySQL 8.0 才修复。

安全性不高

对外暴露的接口可以非常容易猜测对应的信息。比如:/User/1/ 这样的接口,可以非常容易猜测用户 ID 的值为多少,总用户数量有多少,也可以非常容易地通过接口进行数据的爬取。

性能差

自增 ID 的性能较差,需要在数据库服务器端生成。

交互多

业务还需要额外执行一次类似 last_insert_id() 的函数才能知道刚才插入的自增值,这需要多一次的网络交互。在海量并发的系统中,多 1 条 SQL,就多一次性能上的开销。

局部唯一性

最重要的一点,自增 ID 是局部唯一,只在当前数据库实例中唯一,而不是全局唯一,在任意服务器间都是唯一的。对于目前分布式系统来说,这简直就是噩梦。