如果你用的是InnoDB引擎,并不推荐这么做,有以下两个理由: 1. 主键会自动生成索引,索引会占用磁盘空间;同时InnoDB在加载时,会把索引和数据都加载到innodb_buffer_pool中,也就是会占用内存;相同数据量的36位的uuid肯定比自增的id会占用更多的内存和硬盘资源。 2. 主键使用B+Tree,这是种有序的树,uuid是无序的,在进行大量数据的插入/删除操作时会出现频繁排序操作,此时对有IO影响 3. How- ever, secondary indexes (indexes that aren’t the primary key) contain the primary key columns, so if your primary key is large, other indexes will also be large. ---《High Performance MySQL》这里有两个老外测试的数据,大体结果是:不排序的uuid速度会慢近50%,占用空间也较大,如果是基于时间戳(timestamp)生成的有序uuid,则对速度影响并不大,但是资源占用不可避免 http://www.percona.com/blog/2007/03/13/to-uuid-or-not-to-uuid/ http://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/
1. 主键会自动生成索引,索引会占用磁盘空间;同时InnoDB在加载时,会把索引和数据都加载到innodb_buffer_pool中,也就是会占用内存;相同数据量的36位的uuid肯定比自增的id会占用更多的内存和硬盘资源。
2. 主键使用B+Tree,这是种有序的树,uuid是无序的,在进行大量数据的插入/删除操作时会出现频繁排序操作,此时对有IO影响
3. How-
ever, secondary indexes (indexes that aren’t the primary key) contain the primary key
columns, so if your primary key is large, other indexes will also be large. ---《High Performance MySQL》这里有两个老外测试的数据,大体结果是:不排序的uuid速度会慢近50%,占用空间也较大,如果是基于时间戳(timestamp)生成的有序uuid,则对速度影响并不大,但是资源占用不可避免
http://www.percona.com/blog/2007/03/13/to-uuid-or-not-to-uuid/
http://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/
建议先了解,有问题再进行讨论