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

在MySQL中进行比较时,转换为varchar或varchar到int是否更快?,mysql,Mysql,所以我有两个表,它们的ID引用同一个对象。其中一个表将其存储为varchar,另一个表将其存储为int。我需要子查询或可能连接这两个表 WHERE foo = CAST(bar AS UNSIGNED) 或 哪一个更好 编辑:两个ID都没有索引 这取决于索引。如果两列都设置了索引,则应该强制转换为int,因为它只需要比较4个字节。但是,如果只有varchar列被索引,则强制转换为varchar 最后,您应该对查询进行解释,以查看使用了什么索引,并进行相应的转换 如果没有设置索引,一般来说,转换

所以我有两个表,它们的ID引用同一个对象。其中一个表将其存储为varchar,另一个表将其存储为int。我需要子查询或可能连接这两个表

WHERE foo = CAST(bar AS UNSIGNED)

哪一个更好


编辑:两个ID都没有索引

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

最后,您应该对查询进行解释,以查看使用了什么索引,并进行相应的转换

如果没有设置索引,一般来说,转换为int是更好的方法。但是,如果没有索引集,这并不重要,通过索引比选择正确的强制转换方式节省更多的时间。不过,桌子还是很小。那么,这也没什么关系


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

两个ID都没有索引,您仍然建议将varchar强制转换为int吗?在这种情况下,很难说。这取决于很多不同的因素,即使是表中不同值的分布也很重要在加入未索引列时谈论性能就像问你是否应该推拉一辆车,而你也可以驾驶它:-这是真的@PaulSpiegel:dw你认为你为什么需要强制转换它们?@PaulSpiegel反正它们是隐式转换的。@Psi我知道。这就是为什么我要问。如果不显式强制转换,MySQL可以根据要使用的索引选择强制转换的方式。
WHERE CAST(foo AS CHAR) = bar