我应该在MySQL中使用int或char作为id / uuid(主键)吗?

时间:2011-08-26 13:28:14

标签: mysql

我几乎在所有桌子上使用id,你永远都不知道它们什么时候派上用场。但今天我读到了这个......

要特别注意确保按照惯例,您的“ID”列(或主键)是:

char(36)and never varchar(36)

CakePHP将使用这两种定义,但是你将牺牲大约50%的数据库性能(特别是MySQL)。这在更复杂的SELECT中最为明显,可能需要一些JOIN或计算。

我想知道...为什么甚至使用基于文本的东西,当你只需要保存整数?我非常关心为正确的内容使用正确的格式,所以我想知道char是否比整数更好地提升了性能?

2 个答案:

答案 0 :(得分:1)

我强烈建议使用整数。我正在为我的论文做一些建模,我在大型数据集上工作。我不得不创建一个约70,000,000行的表。我的主键是varchar + int。在开始时,创建5位数行的一个周期花了5分钟,很快就变成了40个。删除主键修复了我的性能问题。我想这是因为确保了它的独特性并且它变得越来越耗时。当我的主键是int时,我没有类似的问题。 虽然这是个人经历,所以也许有人可以给出更多理论上可靠的答案。

答案 1 :(得分:0)

char对整数没有任何改进。但是,当您需要阻止用户了解或篡改您不希望他们使用的其他行时,它非常有用。

假设每个用户都有一张带有命名/img/$id.jpg的个人资料图片(最简单的情况,因为您不必在数据库中存储任何数据以获取此信息。当然,还有其他方法)如果您使用整数,则有人可以遍历您拥有的所有个人资料图片。使用UUID,他们不能。

当你有很多记录时,自动增量int对性能更好。您可以将uuid放在另一个字段中(例如,secret_key)。