我正在制作一个数据库表,其中一列是type
. 这是存储在这一行中的东西的类型。
由于这个软件是开源的,我不得不考虑其他人使用它。我可以使用int
,理论上它可以更小以保存在数据库中并且查找速度更快,但是我必须有一些文档,这会使我的用户更加困惑。另一种选择是使用 a string
,它占用更多空间并且查找速度较慢。
假设此表每天将处理数千行,如果我选择了错误的数据类型,它可能会很快达到不可扩展的地步。
int
当数据库中可能有数百万行时,在这种情况下总是首选使用吗?
你是对的,INT
速度更快,因此是更好的选择。
如果您担心未来的开发人员,请在解释每个值的列中添加注释。如果有很多值,请考虑使用查找表,这样您就可以请求一个字符串,获取它的数字 ID(有点像常量)然后查找它。
像这样
id | id_name
---|------------
1 | TYPE_ALPHA
2 | TYPE_BETA
3 | TYPE_DELTA
现在您对 ID 有了字面解释。只需收集 ID ( WHERE id_name = 'TYPE_ALPHA'
),然后使用它来过滤您的表格。
然而,这两种解决方案的一个愉快的媒介可能是使用ENUM
数据类型。文档在这里。
如果我对 ENUM 的理解是正确的,它会在比较过程中将字段视为字符串,但将实际数据存储为数字整数。当您查找一个字符串,并且它没有在表模式中定义时,MySQL 将简单地抛出一个错误,如果它确实存在,那么它将使用整数等价物,甚至不显示它。这提供了速度和可读性。