UUID 作为数据库主键的 Insert 性能测试记录
March 9, 2019
UUID 作为数据库主键的 Insert 性能测试记录 # 在之前一篇 《Laravel使用UUID作为用户表主键并使用自定义用户表字段》发布之后和一个朋友的朋友聊了聊,讲到了一个我没有考虑到的UUID作为主键的问题——Insert性能问题。 朋友的朋友看法如下(有删改): 如果非要用 UUID 的话,完全可以用一个列来单独存放 UUID 的,没有必要把 UUID 设置为主键。自增主键的作用是 insert 的时候是顺序插入到磁盘里的,这样 innodb 直接插入就好了,因为索引插入要进行排序等一系列操作的,涉及到 innodb 索引的具体知识了,所以为了性能考虑,基本都是自增主键,保证顺序 而不是随机 Naïve Insert Time Test # 从一个小的测试开始: 硬件环境: Core i7-8560U 16GiB LPDDR3 SAMSUNG PM981 软件环境: Laravel 5.6 MySQL 5.6 有兩個數據表,一個是使用 UUID 作爲主鍵的 users 表,一個是使用自增 id 作爲主鍵的 tickets 表,串行同步的方式插入 1000 條數據,相關 seed 函數和運行時間如下: User Table with UUID as PK # for ($i=0; $i < 1000; $i++) { DB::table('users')->insert(\[ 'user\_uuid' => (string) Uuid::generate(4), 'user\_name' => str\_random(10), 'user\_password' => bcrypt('secret'), \]); } 用時 62. ...