mysql - 将字符串与 MySQL 中的 INT 列进行比较是否有问题
问题描述
如果我有一个 int 列id
,那么写一个查询是否对性能不利
SELECT * FROM products where id = '1'?
或者 MySQL 是否像处理这个一样
SELECT * FROM products where id = 1
解决方案
一般来说:不要这样做。将值与正确数据类型的文字进行比较,因此您不必担心幕后发生的事情。如果您有一个整数列,则:
SELECT * FROM products WHERE id = 1
在这种特定情况下:当要求将数字与字符串进行比较时,MySQL 将字符串转换为数字。因此,如果您使用以下命令,(几乎)不会有性能损失:
SELECT * FROM products WHERE id = '1'
文字字符串被转换一次,然后检查列中的每个值。
另一方面,考虑一个字符串列,saystr
和一个谓词,如:
WHERE str = 1
现在它反过来了。MySQL 需要将所有字符串值转换str
为数字才能进行比较。表达式变得低效 - 它不能利用索引(它是non-SARGable)。如果有很多行,则性能影响可能很重要。
所以,回到最初的建议:了解你的数据类型;比较时使用正确的文字。
推荐阅读
- batch-file - 为什么这个 cd 命令不能在批处理文件中工作?
- postgresql - PGJWT 签名函数调用返回 null
- java - 执行包含 Apache POI 的 java 代码的问题(在 Eclipse 上)
- azure-active-directory - 如何为非交互式/守护程序应用程序获取 Azure B2C 持有者令牌并在 Azure HTTP 触发的函数中对其进行验证
- database - 我应该使用“指针”来引用另一个集合中的对象,还是直接存储这些对象(MongoDB)?
- java - SparkJava:从请求中获取路由路径
- reactjs - 等效于 React Native Navigation 的动态查询参数?
- r - 使用准最大似然的固定效应泊松估计器
- c# - App.config 代理配置不起作用
- sql - 组合 WHERE 子句子查询