在MYSQL数据库中,将字符串作为主键 [已关闭]
在使用字符串作为主键时面临的另一个问题是,由于索引不断被放入顺序,当创建一个新的键,该键将位于顺序的中间时,索引必须重新排序...如果使用自动递增的整数,新键只需添加到索引的末尾。
然而,这可能会导致新插入的“热点”。只要正确管理数据库,页面上应该有额外的空间用于插入,并且页面拆分应该很少发生。
这就是主键聚集时会出现的情况。你也可以创建非聚集的主键。
XIDs是有序的,如果只使用XID字符串可能会有帮助。
有人能解释一下为什么“索引必须重新排序”吗?据我所知,数据库使用平衡二叉树来索引数据,所以它不在乎新行是否在中间。
我想这取决于你当时使用的数据库技术。这个问题已经有13年了,所以在当时,基于字符串的索引在SQL Server中引起了问题。
使用字符串作为主键是可能的,但如果字符串在逻辑上适合作为主键,则应该使用它。这取决于您要创建的表的大小以及将成为主键的字符串的长度(较长的字符串==较难比较)。对于包含数百万行的表,我不会使用字符串作为主键,但是在较小的表上使用字符串所带来的性能减慢将微不足道,相比于使用与数据无关的整数所带来的困扰。
这是否取决于数据库呢?我认为,如果正确建立索引,使用字符串可能不会比数字慢。
我同意这有很多变量要考虑。(在sqlserver中)即使进行了索引,我们在使用长度在中到高十几个字符以上的字符串时也遇到了真正的性能问题。但是你是对的,有一些可以克服这个问题的方法,例如硬件。
说得对。我同意,如果字符串有意义,那就应该使用它。我还会说,在数据库中,有时需要使用GUID或UUID字段,而自动递增字段无法满足需求。
还要记住,在进行索引比较时,CHAR和VARCHAR之间通常存在很大的区别。
这个答案的评论数量表明它是多么不完整。提及索引将是最低可接受的答案。
根据以上内容,可以得出结论:
问题的出现原因:讨论字符串是否适合作为MYSQL数据库中的主键,并就性能问题进行了讨论。
解决方法:根据表的大小和字符串的长度来决定是否使用字符串作为主键。对于较大的表,不建议使用字符串作为主键,因为较长的字符串比较困难。对于较小的表,使用字符串作为主键所带来的性能减慢微不足道。还可以考虑使用索引来提高性能,但是对于长度较长的字符串可能仍然存在性能问题。此外,还提到了使用GUID或UUID字段来替代自动递增字段的情况。同时,需要注意CHAR和VARCHAR在进行索引比较时可能存在的差异。