在写sql语句过程中,难免会使用IN条件查询,那你知道使用IN要注意那些事项呢?下面我们就来一列举
使用IN查询是否会使用索引
答:有时会使用,有时就不会使用。当IN 的范围小时会使用索引查询,当IN的范围大的时候,就会全表扫描。
IN和EXISTS那个效率高
答:1、如果查询的两个表大小相当,那么用in和exists差别不大。
2、如果两个表中一个表大,另一个是表小,那么IN适合于外表大而子查询表小的情况。
3、如果两个表中一个表大,另一个是表小,EXISTS适合于外表小而子查询表大的情况。
IN的括号中能否使用以逗号隔开的字符串
答:不可以,只会匹配所谓的“第一个” 值,使用GROUP_CONCAT拼接起来的也不行,比如下面的查询,最多查出一条记录,实际有很多条.
SELECT * FROM goods_detail WHERE id IN(SELECT GROUP_CONCAT(goods_detail_id) FROM good_record WHERE order_detail_id = xxx);
NOT IN 会不会使用索引
答:绝对不会使用索引,要谨慎使用。
新手最容易犯的错误
答:在程序中将多个值以逗号分隔拼成一个字符串,然后传sql中使用IN查询,比如:
String var = “1,2,3,4”;
select * from dual id IN(#{var});
这样做是错的,千万要记住。