mysql id uuid 作为主键的一些分析

今天在做APP的接口突然对于url中的参数id准备打算改进下,之前的项目一直想改进,一直懒得动,正好做一个新的项目那就改进一下id吧。

目前我在url中,如果要查看某篇文章一般是http://www.example.com/article/99.html,通过数字99,我可以知道我我的文章id,从1到99可以把我发布的所有的文章内容都可以遍历处理,通过也可以知道我数据库中文章的数量,感觉这样做并不好,起码要给爬虫加一点困难,懵逼一下大众的眼睛才好。

网上查询了一些关于mysql主键用id跟uuid的一些分析,两者各有优点,主要是针对两者的使用以及性能有一些分析,我简单的总结一下。

使用id作为主键

优点:

  • mysql中id可以自增,无需生成。
  • 在百万级别的数据插入速度较快。
  • 查询速度较快。
  • mysql表的数据排序规整。
  • 相比uuid占用空间较小

缺点:

  • 容易暴露数据库的条目数量
  • 容易被遍历数据库内容。

也就是我一开始担心的几个问题。

使用uuid作为主键

优点:

  • 全局唯一,分布式操作比较简单
  • 无法遍历。

缺点:

  • 占用表的体积大
  • 查询速度较慢、
  • 数据库表的体积变大
  • 数据库表中数据变得无序

以上我简单的总结下两者的优缺点。

既然id跟uuid,两者都有也优点缺点,那么我就将两者进行结合,同时实现id跟uuid,id自增作为主键,uuid作为索引,虽然插入速度较慢,但是查询速度较快,数据也不会变的无序。

目前我测试id跟uuid同时使用,除了表的体积变大以及插入速度变慢,其他都比较不错。

欢迎一起交流。

本文已经被查看821次

发表评论

电子邮件地址不会被公开。 必填项已用*标注