Mysql自动增量id或字母数字id作为外键

时间:2015-08-18 10:59:12

标签: php mysql primary-key

我有一个users表,其中包含自动增量id以及唯一的字母数字pid。只有pid被公开曝光,因为我不希望黑客通过在for上运行id循环并提取所有用户数据来游戏系统。

问题是,我是否甚至需要首先存储自动增量id?我需要为其他用户相关的表选择一个外键,例如user_detailsuser_orders等。我应该使用pid还是数字id作为fk?

一些担忧:

  • 加入 - 使用id加入是否会比pid效率更高?
  • 索引 - 索引id的速度是否会快于索引pid
  • 交易 - 当pid用作foreign_key时,涉及多个原子插入的交易是否可行?

1 个答案:

答案 0 :(得分:1)

基本上,答案是“是”,“是”和“是”。

据推测,字母数字键将是许多字节,整数将只有4个字节(或bigint为8)。外键值存储在定义它们的任何索引中,因此短值很好。此外,拥有一个总长度相同的密钥是好的。

您没有提到pid来自哪里。例如,UUID(只是一个位串)是16个字节,而字符串是4个字节。这会在任何索引中占用更多空间,尽管可以使用它。

更重要的是,您关注的是安全性。我认为有一个id面向用户而另一个id在数据库中提供了额外的安全层。例如,您可以围绕从PID到ID(加密,记录,安全的接口)的转换具有高级别的安全性。

PID永远不会出现在实际数据中,因此,假设您遵循表格内容的良好实践,获取许多表格的完整副本可能仍然无法识别用户。