在MySQL中存储二进制数据时,我使用hex()unhex()函数。但是有两种方法可以搜索二进制数据:
方法1

select * from tbl
where
    id=unhex('ABCDABCDABCDABCDABCDABCDABCDABCD')

方法2
select * from tbl
where
    hex(id)='ABCDABCDABCDABCDABCDABCDABCDABCD'

两种方法都有效,但我的直觉是方法1更好,因为只有输入值由unhex函数处理,而在方法2中,表的id列中的每个值都将通过hex函数处理。
这个推理是正确的,还是MySQL会优化查询以防止出现这种情况?选择一种方法而不是另一种方法还有其他原因吗?

最佳答案

当对列使用任何函数时,使用索引将变得困难或不可能。我不确定MySQL是否支持带函数的索引,但它仍然比只使用列更复杂。
同样,正如您所说,函数必须为每一行运行,而在另一行中只为输入数据运行一次。
出于这些原因,请使用带有unhex的表单。

10-07 15:37