在MySQL中存储二进制数据时,我使用hex()
和unhex()
函数。但是我可以通过两种方式搜索二进制数据:
select * from tbl
where
id=unhex('ABCDABCDABCDABCDABCDABCDABCDABCD')
select * from tbl
where
hex(id)='ABCDABCDABCDABCDABCDABCDABCDABCD'
两种方法都有效,但我的直觉是方法1更好,因为unhex
函数只处理输入值,而方法2中表id
列中的每个值都有效将通过hex
函数。
这种推理是否正确,还是MySQL会优化查询以防止这种情况发生?选择一种方法而不是另一种方法还有其他原因吗?
答案 0 :(得分:3)
在列上使用任何函数时,使用索引变得困难或不可能。我不确定MySQL是否支持具有函数的索引,但它比仅使用列更复杂。
另外正如你所说,必须为每一行运行该函数,而在另一行中只运行一次输入数据。
出于这些原因,请使用带有unhex的表单。