Mybatis及Plus,SQL语句IN和OR的区别 用法
一、IN和OR的原理
1、in:in是把父查询表和子自查询表作hash连接;
2、or:or是对父查询表作loop循环,每次loop循环再对子查询表进行查询;
二、操作不同
1、in:in是把父查询表和子自查询表作hash连接;
2、or:or是对父查询表作loop循环,每次loop循环再对子查询表进行查询;
三、适合不同
1、in:in适合用于子查询表数据比父查询表数据多的情况;
2、or:or适合用于子查询表数据比父查询表数据少的情况;
四、执行效率不同
1、in:在没有索引的情况下,随着in后面的数据量越多,in的执行效率不会有太大的下降;
2、or:在没有索引的情况下,随着or后面的数据量越多,or的执行效率会有明显的下降;
五、SQL应用举例
SELECT COUNT(*) FROM health_goods g WHERE g.id IN (72,73,74);
SELECT COUNT(g.id) from health_goods g inner join health_goods_company gc on g.id = gc.goods_id WHERE gc.company_id = 1 AND g.id IN (75,76,77);
SELECT COUNT(*) FROM health_goods g WHERE g.id=72 OR g.id=73 OR g.id=74;
SELECT COUNT(g.id) from health_goods g inner join health_goods_company gc on g.id = gc.goods_id WHERE gc.company_id = 1 AND (g.id=72 OR g.id=73 OR g.id=74);
Mybatis中使用in查询:
Mybatis-Plus中使用in查询: