mysql中使用IN的注意事项

发布时间:2024年01月10日

前言

在写sql语句过程中,难免会使用IN条件查询,那你知道使用IN要注意那些事项呢?下面我们就来一列举

注意事项

  1. 使用IN查询是否会使用索引
    答:有时会使用,有时就不会使用。当IN 的范围小时会使用索引查询,当IN的范围大的时候,就会全表扫描。

  2. IN和EXISTS那个效率高
    答:1、如果查询的两个表大小相当,那么用in和exists差别不大。
    2、如果两个表中一个表大,另一个是表小,那么IN适合于外表大而子查询表小的情况。
    3、如果两个表中一个表大,另一个是表小,EXISTS适合于外表小而子查询表大的情况。

  3. IN的括号中能否使用以逗号隔开的字符串
    答:不可以,只会匹配所谓的“第一个” 值,使用GROUP_CONCAT拼接起来的也不行,比如下面的查询,最多查出一条记录,实际有很多条.

SELECT * FROM goods_detail WHERE id IN(SELECT GROUP_CONCAT(goods_detail_id) FROM good_record WHERE order_detail_id = xxx);
  1. NOT IN 会不会使用索引
    答:绝对不会使用索引,要谨慎使用。

  2. 新手最容易犯的错误
    答:在程序中将多个值以逗号分隔拼成一个字符串,然后传sql中使用IN查询,比如:
    String var = “1,2,3,4”;

select * from dual id IN(#{var});

这样做是错的,千万要记住。

文章来源:https://blog.csdn.net/liqinglonguo/article/details/135514282
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。