sql-索引主键-性能差异64位int与8字符字符串

roejwanj  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(470)

假设您设计了一个sql表(postgresql或sqlite),主键有两个选项:(1)64位整数(自动递增,索引)(2)8字节(8个字符)的字符串,其前几个字母与时间相关,因此可排序,也可索引。
选择字符串版本会有任何性能/存储缺陷吗?因为它们都占用8个字节,并且可以按时间(或插入顺序)进行索引和排序,所以对于select查询,它们的速度也应该相同?

iyfamqjs

iyfamqjs1#

选择字符串版本会有任何性能/存储缺陷吗?
弦比看起来要复杂得多。例如:
字符是ascii还是unicode?
什么是排序规则?
是数据类型 char() 或者 varchar() ?
在大多数数据库中,所有这些都会影响比较和成本。另一方面,整数很简单。它们是简单的二进制表示。当然,它们可以声明为unsigned和signed,但这是一个选项,而不是许多带有字符串的选项。
sqlite使用了一种与其他数据库(和标准sql)截然不同的神秘数据类型系统,它使用值而不是列定义来存储类型。我不知道这会如何影响数据库中索引的性能。

相关问题