假设您设计了一个sql表(postgresql或sqlite),主键有两个选项:(1)64位整数(自动递增,索引)(2)8字节(8个字符)的字符串,其前几个字母与时间相关,因此可排序,也可索引。选择字符串版本会有任何性能/存储缺陷吗?因为它们都占用8个字节,并且可以按时间(或插入顺序)进行索引和排序,所以对于select查询,它们的速度也应该相同?
iyfamqjs1#
选择字符串版本会有任何性能/存储缺陷吗?弦比看起来要复杂得多。例如:字符是ascii还是unicode?什么是排序规则?是数据类型 char() 或者 varchar() ?在大多数数据库中,所有这些都会影响比较和成本。另一方面,整数很简单。它们是简单的二进制表示。当然,它们可以声明为unsigned和signed,但这是一个选项,而不是许多带有字符串的选项。sqlite使用了一种与其他数据库(和标准sql)截然不同的神秘数据类型系统,它使用值而不是列定义来存储类型。我不知道这会如何影响数据库中索引的性能。
char()
varchar()
1条答案
按热度按时间iyfamqjs1#
选择字符串版本会有任何性能/存储缺陷吗?
弦比看起来要复杂得多。例如:
字符是ascii还是unicode?
什么是排序规则?
是数据类型
char()
或者varchar()
?在大多数数据库中,所有这些都会影响比较和成本。另一方面,整数很简单。它们是简单的二进制表示。当然,它们可以声明为unsigned和signed,但这是一个选项,而不是许多带有字符串的选项。
sqlite使用了一种与其他数据库(和标准sql)截然不同的神秘数据类型系统,它使用值而不是列定义来存储类型。我不知道这会如何影响数据库中索引的性能。