思想实验:
您有一个CMS,它允许用户上传图像,并且每个页面都作为一行存储在数据库中。当用户上传图像时,图像被转换为base64编码的字符串。然后,上传脚本更改表中的
ENUM列,并将base64编码的字符串添加为允许的可枚举值。
在CMS的前端,将在页面上运行SELECT语句,使用ENUM列的值来使用data url呈现图像。
编写WHERE子句与枚举值匹配的select语句是否比WHERE子句与varchar列匹配的查询具有任何性能优势?
...And的记录,我知道这是一个绝对糟糕的设计一个CMS。我更感兴趣的是了解MySQL将如何在这种设置中遭受(或蓬勃发展)。
发布于 2011-09-26 19:50:13
枚举存储实际上只是存储字段的值的索引。因此,您不会存储base64数据,而是将其关联的索引存储在任何并行表中,mysql将枚举值存储在其中。
但是,考虑到实际的SQL查询字符串必须包含完整的base64数据,因此您不必要地增加了查询字符串的大小。考虑一下,一个像素jpeg仍然是119字节,并且在base64表单中占160个字符。这可能是浪费空间的150+字符。即使是中等大小的图像,查询字符串也会更大,并且很容易超过mysql的max_allowed_packet设置。
https://stackoverflow.com/questions/7560437
复制相似问题