拥有数据库表的主键(比如用户 ID 为 PK 的用户),是 int 还是 char(32),对性能有什么影响吗?
我想知道这个对于 MySQL 和 SQLite。
int 将是 1,2,3,... 处的自动增量,而 char(32) 将是唯一的 32 个字母数字字符。
拥有数据库表的主键(比如用户 ID 为 PK 的用户),是 int 还是 char(32),对性能有什么影响吗?
我想知道这个对于 MySQL 和 SQLite。
int 将是 1,2,3,... 处的自动增量,而 char(32) 将是唯一的 32 个字母数字字符。
首先,我不确定 SQLite,但对于 MySQL,最好将INT
其CHAR(32)
用作 PK。它与 MySQL 如何为列建立索引有关,因此对于 PK,整数总是比字符串好。
另一件事是CHAR(32)
消耗更多的空间(32 字节 = 256 位),其中INT(10)
只有 32 位长。这意味着CHAR(32)
字段比字段具有更多不同的键INT(10)
。
当表本身按索引顺序存储时,索引效率更高,因为这样就不需要在索引中进行二次查找来查找记录。这通常称为“索引组织表”或“聚集索引”。
在 SQLite 中,您必须将 PK 声明为INTEGER PRIMARY KEY才能获得聚集索引。
MySQL 支持聚集索引的两种数据类型;唯一的区别是char(32)
占用更多的空间,这可能需要更多的 I/O。