mysql - 在数据库中使用 1 位代码 VS ENUM 的描述性字符串?

标签 mysql sql database database-design enums

在我的 user_accounts 表中,我有一个名为 source 的字段,它是一个 ENUM。它表明用户是如何被推荐到该网站的。可能的值是通过 Facebook、通过电子邮件或通过常规网站注册。

对于如何将这些值存储在数据库中,有 3 种可能的选择:

  • 作为一个完整的字符串,即 facebook, email , website

  • 作为 1 个字母的代码,例如 F, E, W

  • 作为 1 数字代码,例如 1, 2, 3

从数据库性能/维护的角度来看,哪种方法是最好的方法?如果我将值存储为 1 个字母/数字代码而不是完整字符串,是否会有任何影响(例如更快的查询)?此列将在 WHERE 语句中使用。

最佳答案

在性能方面,ENUMS 确实倾向于最优化(因为系统知道可能的值集,它在搜索等方面使用不同的算法)。您可以使用 ENUMS('FACEBOOK' 等)存储完整的字符串,它们每行仅占用 1 个字节的空间! (提供总共少于 256 个枚举)。但是,仅当您确定 F、E、W 是您将看到的唯一选项时才使用枚举。添加新的 ENUMS 很痛苦,因为您必须更改表以更新枚举值,并且必须确保枚举顺序。

紧随其后的是数字。问题是可读性。您可能最终不得不保留另一个表格来理解每个数字代表什么。 (要么在数据库中,要么在应用程序中)

就查询速度而言,Varchar 是最差的,但可读性和可管理性最高。

关于mysql - 在数据库中使用 1 位代码 VS ENUM 的描述性字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6098569/

相关文章:

php - 数据没有从网页上的 php 代码进入我的 sql 数据库

php - 循环内增加 DateInterval

mysql - 避免查询中出现重复并将所有重复行设为空白

java - 检索数据库中插入的最后一行

mysql - 提取每月的点击次数

mysql - 表适配器不删除以编程方式删除的数据表行

c# - 获取错误 : "Error converting data type nvarchar to numeric" in SQL

mysql - MYSQL错误代码: 1442?有什么解决办法吗

c# - 将 C# 桌面应用程序与 Rails 网络应用程序链接起来

sql - Moodle:用于列出所有用户的 SQL(带有自定义用户配置文件字段)