拥有数据库表的主键(比如具有user_id的用户是PK),是int还是char(32),这在性能上是否有任何不同?
我想知道MySQL和SQLite。
int将是1,2,3的自动增量,...而char(32)将是一个唯一的32个字母数字字符。
答案 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.