MySQL将图像存储在枚举列中

时间:2011-09-26 19:44:54

标签: mysql database-design

思考实验:

  

您有一个允许用户上传图像的CMS,每个页面都作为一行存储在数据库中。当一个用户   上传图像,它被转换为base64编码的字符串。该   上传脚本然后更改表中的ENUM列并添加base64编码   string作为允许的可枚举值。

     

在CMS的前端,在页面上运行SELECT语句,ENUM列的值将用于使用data url渲染图像。

写一个WHERE子句与枚举值匹配的select语句是否比WHERE子句与varchar列匹配的查询有任何性能优势?

...为了记录,我知道这对于CMS来说是一个绝对可怕的设计。我更感兴趣的是通过这种设置来了解MySQL将如何遭受(或茁壮成长)。

1 个答案:

答案 0 :(得分:0)

枚举存储实际上只是您存储字段的值的索引。所以你不会存储base64数据,只是它的关联索引在mysql存储枚举值的任何并行表中。

但是,请考虑实际的SQL查询字符串必须包含完整的base64数据,因此您不必要地增加查询字符串的大小。考虑单个像素jpeg仍然(大约)119字节,而base64形式占用160个字符。这可能是浪费空间的150多个字符。对于即使是中等大小的图像,您的查询字符串也会更大,并且可能很容易超过mysql的max_allowed_pa​​cket设置。