首页 > 解决方案 > 将字符串与 MySQL 中的 INT 列进行比较是否有问题

问题描述

如果我有一个 int 列id,那么写一个查询是否对性能不利

SELECT * FROM products where id = '1'?

或者 MySQL 是否像处理这个一样

SELECT * FROM products where id = 1

标签: mysqlsqlstringquery-optimizationwhere-clause

解决方案


一般来说:不要这样做。将值与正确数据类型的文字进行比较,因此您不必担心幕后发生的事情。如果您有一个整数列,则:

SELECT * FROM products WHERE id = 1

在这种特定情况下:当要求将数字与字符串进行比较时,MySQL 将字符串转换为数字。因此,如果您使用以下命令,(几乎)不会有性能损失:

SELECT * FROM products WHERE id = '1'

文字字符串被转换一次,然后检查列中的每个值。

另一方面,考虑一个字符串列,saystr和一个谓词,如:

WHERE str = 1

现在它反过来了。MySQL 需要将所有字符串值转换str为数字才能进行比较。表达式变得低效 - 它不能利用索引(它是non-SARGable)。如果有很多行,则性能影响可能很重要。

所以,回到最初的建议:了解你的数据类型;比较时使用正确的文字。


推荐阅读