MySQL hex()与unhex()的区别

4

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

方法1

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

方法二

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

两种方法都可以,但我的直觉是方法1更好,因为只有输入值会被unhex函数处理,而在方法2中,表中id列中的每个值都将通过hex函数。

这种推理正确吗?MySQL是否会优化查询以防止这种情况?选择一种方法而不是另一种方法还有其他原因吗?


1
你可能也会感兴趣了解,就像标准 SQL 一样,MySQL 支持将二进制字符串表示为十六进制字面量,只需在其十六进制编码的字符串前加上 x 即可——例如,WHERE id = x'ABCDABCDABCDABCDABCDABCDABCDABCD'。虽然这样可以省去对 UNHEX() 的显式调用,但在表面下仍然执行完全相同的操作;只是更加简洁而已。 - eggyal
2个回答

5

当您在列上使用任何函数时,使用索引变得困难或者不可能。我不确定MySQL是否支持带有函数的索引,但是它比仅使用列更加复杂。

另外,正如您所说,对于每一行都需要运行函数,而在另一种情况下只需运行一次输入数据。

出于这些原因,请使用带有 unhex 的形式。


1
如果在id列上有索引,第一种方法会更快。如果没有索引,第一种方法仍然更有效率。使用第一种方法,UNHEX函数只需调用一次,如果有索引,则会使用它。第二种方法为表中的每一行调用该函数,并且不使用索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接