我目前在 MySQL 数据库中使用枚举作为 TINYINT。我的表中有几百万行。然后我们将枚举从 TINYINT 映射到其他地方的字符串。
我正在考虑将这些枚举存储为字符串。如果字符串索引正确,有人知道 MySQL 在查询字符串枚举而不是 TINYINT 枚举时的表现吗?
感谢帮助。谢谢。
最佳答案
枚举的存储就像有一个查找表一样,因此每行仅存储一个数字引用,其他地方有一个查找表。从技术上讲,匹配枚举的整数值与匹配整数一样快,因为两者是相同的,匹配字符串值稍微慢一点(在所有情况下都是一个),仅仅是因为只完成了一次“搜索”,通过查找表以查找整数值,然后使用该整数值执行查找。
一个例子是如果你搜索一个不存在的值,尝试匹配一个不存在的值的枚举数值,它仍然会搜索所有数据,但是尝试匹配一个字符串不存在的值,并通过查找表进行较小的搜索,在搜索任何数据之前不返回任何匹配项。
不要对“是/否”或“男性/女性”答案使用枚举,因为数字数据和查找表比“位”值(0 或 1)占用更多空间。另外,不要在枚举定义中使用数字字符串,例如enum("1","0") 因为这会让任何查看代码和查询的人感到困惑(因为存储的查找表是 [0 => "1", 1 => "0"]。
关于mysql - 在 MySQL 中使用字符串枚举 - 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4636151/