Mysql 对列值使用字符串或int之间的折衷

Mysql 对列值使用字符串或int之间的折衷,mysql,string,int,row,sql-types,Mysql,String,Int,Row,Sql Types,我正在制作一个数据库表,其中一列是type。这是存储到此行中的对象的类型 因为这个软件是开源的,我必须考虑其他人使用它。我可以使用int,从理论上讲,它在数据库中的存储空间更小,查找速度也更快,但是我需要一些文档,这会让我的用户更加困惑。另一个选项是使用字符串,这会占用更多空间,并且查找速度较慢 假设这个表每天处理数千行,如果我选择了错误的数据类型,它可能会很快达到无法扩展的程度 在这种情况下,当数据库中可能有数百万行时,是否总是首选使用int?您是正确的,int更快,因此是更好的选择 如果您担

我正在制作一个数据库表,其中一列是
type
。这是存储到此行中的对象的类型

因为这个软件是开源的,我必须考虑其他人使用它。我可以使用
int
,从理论上讲,它在数据库中的存储空间更小,查找速度也更快,但是我需要一些文档,这会让我的用户更加困惑。另一个选项是使用
字符串
,这会占用更多空间,并且查找速度较慢

假设这个表每天处理数千行,如果我选择了错误的数据类型,它可能会很快达到无法扩展的程度


在这种情况下,当数据库中可能有数百万行时,是否总是首选使用
int

您是正确的,
int
更快,因此是更好的选择

如果您担心未来的开发人员,请在解释每个值的列中添加注释。如果有很多的值,考虑使用查找表,这样你可以请求一个字符串,得到它的数字ID(一个一个比特,像一个常量),然后寻找它。 像这样

id |  id_name
---|------------
1  | TYPE_ALPHA
2  | TYPE_BETA
3  | TYPE_DELTA
现在您有了ID的文字解释。只需收集ID(
,其中ID\u name='TYPE\u ALPHA'
),然后使用它来筛选表

然而,这两种解决方案中的一个令人满意的媒介可能是使用
ENUM
数据类型


如果我对ENUM的理解是正确的,那么它在比较过程中将字段视为字符串,但将实际数据存储为计算整数。当您查找一个字符串时,它没有在表模式中定义,MySQL只会抛出一个错误,如果它确实存在,那么它将使用整数等价物,甚至不显示它。这提供了速度和可读性。

此外,您选择的解决方案取决于“类型”的数量。如果只有1-3种类型,请使用列注释。如果有4-7,请使用枚举。如果有超过7个,一定要使用查找表。。。