在MySQL中进行比较时,转换为varchar或varchar到int会更快吗?

时间:2017-03-24 22:14:21

标签: mysql

所以我有两个表具有引用同一对象的ID。其中一个表将其存储为varchar,另一个将其存储为int。我想要子查询(或可能加入)这两个表。

WHERE foo = CAST(bar AS UNSIGNED)

WHERE CAST(foo AS CHAR) = bar

哪一个更好?

编辑:这两个ID都没有编入索引。

1 个答案:

答案 0 :(得分:1)

这取决于索引。如果两个列都设置了索引,则应转换为int,因为它只需要比较4个字节。但是,如果仅对varchar列编制索引,则转换为varchar

最后,您应该使用您的查询explain来查看使用的索引,并进行相应的转换。

如果未设置索引,则转换为int通常是更好的方法。但是,如果没有索引设置,它并不重要,通过索引比通过选择正确的转换方式节省更多时间。除此之外,表格很小。然后,它也不重要。

事实上,我们不仅要考虑比较成本,还要考虑投射费用:将int投放到varchar比将varchar解析为int。但是,比较具有至少4个字符的varchar将使该优势无用。如果您的值往往高于999,则转换为int的速度会更快。但现在这取决于您的操作系统,体系结构,mysql二进制文件使用的指令集等等。获得真正可靠答案的唯一方法是:在目标机器上对这种情况进行基准测试。