Mysql 插入id号而不是使用枚举类型-查询速度会变慢多少?

Mysql 插入id号而不是使用枚举类型-查询速度会变慢多少?,mysql,enums,Mysql,Enums,抱歉我的英语(我是从意大利发帖的)并且(如果可能的话)用简单的语言回答我(谢谢) 我想让你知道我不是一个专业的程序员:我只是一个编程迷 问题是: 我将创建一个包含四个字段的表,其中包含6、20、165和大约500个可能值的重复(所有varchar都在10和50之间) 我的第一个想法是使用只有一个字段(主键)和四个一对多关系的四个表 后来,我阅读了有关枚举类型的数据,并寻找使用此解决方案的方法(因为我认为使用所有这些varchar将占用许多字节) 我已经阅读了很多关于Enum类型的优缺点的网页,但

抱歉我的英语(我是从意大利发帖的)并且(如果可能的话)用简单的语言回答我(谢谢)

我想让你知道我不是一个专业的程序员:我只是一个编程迷

问题是: 我将创建一个包含四个字段的表,其中包含6、20、165和大约500个可能值的重复(所有varchar都在10和50之间)

我的第一个想法是使用只有一个字段(主键)和四个一对多关系的四个表

后来,我阅读了有关枚举类型的数据,并寻找使用此解决方案的方法(因为我认为使用所有这些varchar将占用许多字节)

我已经阅读了很多关于Enum类型的优缺点的网页,但是我仍然有很多疑问

我的枚举类型问题有: 1) 我永远不需要空字符串(因此我必须通过在严格模式下工作来避免任何插入错误); 2) 我担心枚举与其他数据之间的关联可能会发生变化(例如,如果某个枚举值消失,我需要将其数据拆分为其他数据)

所以,我害怕使用Enum,我考虑使用第三种解决方案:

鉴于枚举类型使用数组的数字id而不是varchar,我考虑在四个表中插入一个id列(数字),并将表中的四个id与数据而不是字符串值一起使用

现在的问题是: 使用第三种方法,与使用Enum提取字符串数据相比,我需要一个非常复杂的查询。 所以我不知道哪一个是在不损失提取数据时间的情况下保存字节的最佳选择

你能给我一个选择吗

如何计算行限制,超过该限制,查询将变得缓慢


提前感谢所有帮助我的人。

枚举类型适合存储少量不应更改的值

您的场景非常常见,标准做法是创建四个引用表,每个表都有一个ID字段和一个字符串值字段,然后将这些ID存储在主表中

定义外键约束可以确保数据的完整性,使用索引,您的查询将非常快速,完全不用担心这一点

查询并不复杂,只需要四个连接。还可以创建视图,以避免在不同查询中重复连接


此解决方案更灵活,更易于管理或移植。

1。简化问题。2.提供简化问题的示例(sqlfiddle?)以及所需的结果。3.通常,避免枚举并设置数据类型。它们的使用与SQL数据库设计的原则背道而驰。