用于MySQL唯一键/索引的数据类型

时间:2011-03-10 06:16:09

标签: mysql sql primary-key

使用INT作为MySQL中索引的数据类型是否可以。我不确定这是否是最佳方式,因为我完全希望这个表能够获得很多条目,最终会“溢出”INT

我怀疑像Facebook这样的东西使用INT作为他们的索引,例如wallpost表或其他会流量很大/获得大量条目的东西。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

使用INT( 11 ) UNSIGNED ZEROFILL NOT NULL

答案 1 :(得分:1)

一个INT可以超过2 十亿(如果没有签名则是两倍)。如果你希望你的表有比这更多的行,你可以使用BIGINT(无符号上升到18,446,744,073,709,551,615 - 可能甚至超过Facebook的需要)。

答案 2 :(得分:1)

一般来说,您有两种选择:

反映您正在使用的数据的实际情况的“natural key”。 例如,电话号码可能是呼叫列表的有效主键,但它根本不适用于医疗保健受益人列表,因为许多人可能在家中共享相同的电话号码。请注意,自然键可能由多个字段组成。例如,Make,Model和Year的组合可能是汽车模型列表的关键。

另一方面,'surrogate key'只是您为行指定的任意值。如果你走那条路,我建议使用GUID(MySql中的UUID)。 The best way that I know表示MySQL中的那些是char(36)列。 GUID永远是唯一的,可以无限使用。

如果你坚持使用普通旧号码,那么INT可能没问题,或者你可以使用BIGINT来确定。

BIGINT UNSIGNED ZEROFILL