【发布时间】:2016-02-15 20:30:31
【问题描述】:
我有两个 MySQL 表,Post 和 Account。
我将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:
但是,后来我注意到 IN 子句混合了数字和字符串,所以我将 123 更改为 '123' 和 EXPLAIN 再次,它使用 索引 现在:
那么,我的问题是当数字和 varchars 混合在 IN 中时会发生什么?
提前致谢
【问题讨论】:
-
Ricky,如果使用 (9, 10, 76, 77, 123),查询的性能会提高吗?如果使用 ('9', '10', '76', '77', '123'),性能有何变化?
-
没有图片,谢谢。直接粘贴文本即可
-
@MuhammadMuazzam,该线程很有用且相关,但不回答操作的问题,因为它处理结果可能不一致的事实,因为使用了不同的比较运算符(MySQL 错误如果你问我)但是,这并不能解释这里的性能问题。很可能已经完成了 varchar 比较,但我不确定这一点,另一个问题并不暗示它。
-
p.id 列的数据类型?
-
当使用相同的数据类型时,性能问题在上面得到解决
标签: mysql sql database optimization