公认的是,在int列上搜索表的速度比在字符串列上搜索表的速度快(例如varchar)。
但是,如果我的衬衫表带有“颜色”列,那么创建一个颜色表时,该表上的主键是衬衫表上的外键会更好吗?搜索绿色的衬衫时,该联接是否会抵消在衬衫的“颜色”列中的值为int而不是诸如“绿色”之类的字符串值的性能优势?
与正在执行的其他操作相比,这两种方法之间不太可能有很大的性能差异。如果只有少数几种颜色(最多数百种),则大多数数据库中的颜色表都可以放在单个页面上。颜色上的索引将使查找速度非常快,并且不会引起任何I / O活动(在第一次运行以加载页面之后)。
字符串比较取决于数据库,但是它确实包含一个函数并从页面读取数据。因此,它不是免费的。当然,不同的数据库对于字符串函数可能具有不同的性能特征。
应该将其存储在哪里应该取决于您的应用程序。假设您有一个要向用户展示颜色的应用程序。您可能有一天想用西班牙语,斯瓦希里语或中文显示颜色的名称。如果是这样,拥有一个单独的表将使这种国际化变得更加容易。更平淡的是,您可能希望阻止输入“ Grene”,如果这样,使用这样的表可以使选择列表更容易。
另一方面,如果性能是您唯一关心的问题,则没有什么不同。在其他情况下,查找表实际上可能比非规范化表 快 。当字符串很长时,会发生这种情况,这会增加较大表中每个记录的长度。较大的表意味着更多的页面,需要更长的时间才能加载到内存中。