mysql中使用IN的注意事项

本文介绍了SQLIN查询的使用注意事项,包括索引利用情况、IN与EXISTS效率对比、IN括号中不能直接使用逗号分隔的值以及NOTIN的索引使用问题,提醒新手避免常见的错误,如将多个值拼接后用于IN查询。
摘要由CSDN通过智能技术生成

前言

在写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});

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值