使用int和char在PK上的性能(32)

时间:2013-10-06 08:05:34

标签: mysql sql performance sqlite primary-key

拥有数据库表的主键(比如具有user_id的用户是PK),是int还是char(32),这在性能上是否有任何不同?

我想知道MySQL和SQLite。

int将是1,2,3的自动增量,...而char(32)将是一个唯一的32个字母数字字符。

2 个答案:

答案 0 :(得分:1)

首先,我不确定SQLite,但对于MySQL,最好使用INT而不是CHAR(32)作为PK。它与MySQL如何为列构建索引有关,因此整数总是比PK的字符串更好。

另一件事是CHAR(32)消耗更多空间(32字节= 256位),其中INT(10)仅为32位长。这意味着CHAR(32)字段的密钥与INT(10)字段的密钥要多得多。

答案 1 :(得分:1)

当表本身以索引顺序存储时,索引更有效,因为这样就不必在索引中进行辅助查找来查找记录。 这通常称为“索引组织表”或“聚簇索引”。

在SQLite中,您必须将PK声明为INTEGER PRIMARY KEY才能获得聚集索引。

MySQL支持clustered index的两种数据类型;唯一的区别是char(32)占用更多空间,这可能需要更多I / O.