在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的表单。