我正在为字典创建数据库。考虑表格WORD。我目前的计划是使其主键word_id
成为一个整数,然后给它另一个属性text
,这是该单词的文本表示。
然而,我认为因为它是一本字典,所以适用于单个单词的所有定义,发音和词性都将在其标题下找到,并且对于具有相同词的其他单词绝对没有办法拼写有不同的页面。因此,将text
作为主键是有道理的,我不需要word_id
。
我现在的问题是,哪种方法会更快?看起来给它一个整数主键更好,因为它是一个容易比较的原始类型,在将其作为其他表的外键检查时尤其有用。我不确定,但我认为如果主键是一个字符串,那么对其他表的外键进行检查涉及一个基础的每字符比较,这需要更长的时间,再加上不区分大小写的检查的负担。
另外,如果速度不是一个很大的问题,我还应该考虑其他因素吗?我即将使用的数据库是MySQL。
答案 0 :(得分:3)
答案 1 :(得分:1)
我现在的问题是,哪种方法会更快?看起来给它一个整数主键更好,因为它是一个容易比较的原始类型,在将其作为其他表的外键检查时尤其有用。我不确定,但我认为如果主键是一个字符串,那么根据其他表的外键检查它涉及一个基础的每个字符比较,这需要更长的时间,加上不区分大小写检查的额外负担。
我的猜测是你是对的,但与数据库服务器的其他处理任务(例如网络+磁盘I / O)相比差别很小,无关紧要。
答案 2 :(得分:1)
另一个支持int的观点是字符串导致以下问题:
比较大小写是否敏感?
是否修剪了文字或是否有其他不可见的空格?
编码是对的吗? (如果从/向另一个系统导入/导出数据,则可能会出现问题。)
有意义的密钥需要编辑,而没有人可以编辑标识列,没有人对编辑guid或无意义的int感兴趣。
答案 3 :(得分:1)
虽然默认情况下会为主键创建索引,并且如果您指示它是否为整数id,则匹配将更快。但是,无论您的主键是什么,您始终可以在表的任何列上创建索引。因此,性能更多地取决于索引而不是主键。