在数据库中存储枚举类型的方法有两种:字符串或整数。
保存枚举( sex = {male,female}、account_type = {regular,pro,admin}等)因为字符串使事物更具可读性,但需要比整数更大的空间。
另一方面,整数需要将枚举映射到数据库内外。作为一种好处,区分大小写的方法是在数据库之外使用整数来处理.
假设两者都被索引,那么进行整数转换是否值得呢?带整数的查找速度有多快?
示例
也许一个具体的例子可以帮助想象事物。让我们以上面的account_type为例,数据库中有10万个用户。
字符串枚举
假定8位固定长度CHAR型
7*100000*8/8 = 700000 bytesInteger enum
假定8位TINYINT整数
100000*8/8 = 400000 bytes看起来这个尺寸几乎是整数枚举的一半。还需要整理索引。
发布于 2011-07-18 11:13:25
答案是,正如你所预期的,这取决于。
数据库越大,节省的空间就越大--不仅在磁盘上,而且在网络IO和计算方面。
就我个人而言,我会存储整数而不是文本值,除非枚举有直接的DB超级(就像MySQL那样)。
发布于 2011-07-18 11:15:42
如果数据库大小成为问题,则ints将占用较少的内存。
这取决于您是否直接从数据库返回值,而不遍历代码层(例如,某种形式的转换)。如果是,则需要数据库中的字符串值(但是可以将它们存储为相关表中的查找)
发布于 2011-07-18 11:18:44
始终存在一个问题,即数据库是否将由人类来查看,而不是通过执行转换的应用程序来查看。如果一个人出于任何原因查看DB,那么文本更好--尤其是如果有DB可能无法访问代码来查看枚举转换的话。
如果存储数据的大小更重要,那么转换为ints是一个更好的主意。但是,对于这个改进的空间,您将失去可读性。这取决于什么是最重要的因素。
当然,您可以包括SProcs或视图或诸如此类来查看存储的整数数据并将其转换为字符串值,如果需要在两者之间取得平衡,这将是有意义的。
但正如奥德所说,没有一个简单的答案。每一种情况都会略有不同。
https://stackoverflow.com/questions/6732039
复制相似问题