我需要使用文本列作为我的sqlite数据库的主键。 我也有可能使用哈希函数从我的文本值中获取32位/ 64位int(我想用作主键)。所以我可以使用这些int哈希值而不是我的文本值作为主键。 但是我需要在表格中另外存储原始文本值。
但我读到sqlite在内部使用了rowid,所以我不知道使用哈希函数是否会有所帮助。
sqlite会在他们的页面中存储rowid或文本值(当我使用它而不是哈希值时)吗?当它存储文本值时,我认为它可以吹掉页面并使用哈希值会更好。
但我在这里缺乏知识。 我希望你能帮助我。
答案 0 :(得分:1)
不幸的是,字符串上的任何索引(包括用作主键)占用了两倍的空间。一次为行中的值,第二次为索引中的值。
因此,如果散列符合您的需求(您不需要排序,按范围查找),使用它将是一个好主意。
答案 1 :(得分:1)
如果text列中的值应该是唯一的,那么无论如何你都必须在该列上放置一个唯一的索引。
真正的问题与主键没有关系,它与外键引用有关。如果表具有唯一整数列和一列唯一文本,则可以使用其中一个作为外键引用的目标。对整数的所有外键引用都需要连接;对文本的一些外键引用不需要连接。 (因为关键信息是在密钥本身中携带的。只有那些除了文本密钥之外需要更多列的查询才需要加入。)