sqlite:我应该使用文本列作为主键,还是通过哈希函数转换它



我需要使用文本列作为我的sqlite数据库的主键。我也有可能使用哈希函数从我的文本值中获得32位/64位int(我想用为主键)。所以我可以用这些int散列值代替我的文本值作为主键。但随后我需要在表中额外存储原始文本值。

但是我读到sqlite内部使用rowwid,所以我不知道使用哈希函数是否会有所帮助。

将sqlite存储行或文本值(当我使用它而不是哈希值)在他们的页面?当它存储文本值时,我认为它可以吹掉页面,使用哈希值会更好。

但是我在这方面缺乏知识。我希望你能帮助我。

如果文本列中的值应该是唯一的,那么无论如何都必须在该列上放置唯一索引。

真正的问题与主键无关,而与外键引用有关。如果一个表有一个唯一整数列和一个唯一文本列,您可以使用其中任何一个作为外键引用的目标。所有对该整数的外键引用都需要连接;对文本的一些外键引用不需要连接。(因为关键信息就藏在钥匙里。只有那些除了文本键之外需要更多列的查询才需要连接。

遗憾的是,字符串上的任何索引(包括用作主键的索引)都需要双空格。第一次为行中的值,第二次为索引中的值。

因此,如果哈希满足您的需求(您不需要排序,按范围查找),使用它将是一个好主意。

最新更新