1

拥有数据库表的主键(比如用户 ID 为 PK 的用户),是 int 还是 char(32),对性能有什么影响吗?

我想知道这个对于 MySQL 和 SQLite。

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

4

2 回答 2

1

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

另一件事是CHAR(32)消耗更多的空间(32 字节 = 256 位),其中INT(10)只有 32 位长。这意味着CHAR(32)字段比字段具有更多不同的键INT(10)

于 2013-10-06T09:30:52.153 回答
1

当表本身按索引顺序存储时,索引效率更高,因为这样就不需要在索引中进行二次查找来查找记录。这通常称为“索引组织表”或“聚集索引”。

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

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

于 2013-10-06T11:56:18.513 回答