我的应用程序的用户可以通过Facebook进行身份验证,因此我将facebook uids存储在我的数据库中,当用户登录时,我需要像这样查询我的数据库:
SELECT * FROM users WHERE uid = _SOME_UID_;
现在uid
列是VARCHAR,但我认为我需要将其转换为某种数字类型BIGINT。
为什么我认为我需要这样做:
处理器时间一般使用数字(过滤/索引)的操作总是比使用字符串的相同操作更快
存储:数字小于相应的字符串
ammm ... oauth-argument Facebook身份验证是我将要使用的唯一身份验证类型(实际上,这是一个画布应用程序) - 所以我不需要照顾非数字的UID
问题是:
答案 0 :(得分:1)
我会坚持使用VARCHAR。
虽然它当然可以存储为一个,但我认为Facebook UID并不是真正的数字。它是一组字符,恰好是所有数字 - 但它是一个标识符,而不是一个被操纵的数字。
我想知道真正的性能差异。找出答案,做出决定会更容易。
答案 1 :(得分:1)
这取决于几个因素。首先,您的数据收集可能有多大,我们是在谈论成千上万的UID还是数百万?如果您不担心规模,如果您的项目然后尝试找到最小的容器(一个大整数),那么您更担心能够随着更改进行扩展。
所以现在你需要选择一个合理大小的VarChar,它将采用任何格式的UID并且开心 - 这包括前导零和bigInt,它更容易消毒但对前导零和字母不友好。
如果您知道 UID始终是非前导零或零填充数字,那么您可以通过强制转换为类型来获得更好的安全性。这和大小都是bigInt的好处。
VarChar的大小有所下降 - 你需要在开始之前知道最大的UID长度,但是可以处理前导零,字母和其他意外内容,只有你正在清理字符串的小例外。
从编程的角度来看,由于UID只是一个独特的标签,因此它的可能性很小。有了它的索引,我不应该想象MySQL中存在任何速度差异,至少不是它可能使用的常见引擎。
所以最佳只是数据中最需要的产品。