This question already has answers here:
MySQL Unexpected Results: “IN”-clause (number, 'string') on a varchar column

(2 个回答)


5年前关闭。




我有两个 MySQL 表, PostAccount

我将 NodeJS 用于我的后端 API ,它生成以下 SQL 语句:
select `p`.`id` as `post_id`
from `Post` as `p`
left join `Account` as `a`
    on `a`.`id` = `p`.`author`
where `p`.`id` in ('9', '10', '76', '77', 123)
order by `p`.`id` asc

代码有效,问题是 SLOW !我尝试使用 EXPLAIN 来检查发生了什么,它没有使用 INDEX :

mysql - 查询与IN有什么区别-LMLPHP

但是,然后我注意到 IN 子句混合了数字和字符串,所以我将 123 更改为 '123' 再次解释 ,它现在使用 INDEX :

mysql - 查询与IN有什么区别-LMLPHP

所以,我的问题是当数字和 varchars 在 IN 中混合时会发生什么?

提前致谢

最佳答案

如果您查看 MySQL 文档 How MySQL uses indexes,您会注意到以下语句:



因此,如果您在 IN -Statement 中混淆了数据类型,则可能会阻止使用索引。

关于mysql - 查询与IN有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33706632/

10-11 01:46
查看更多