(1)semi join
    MySQL里对子查询的执行计划进行优化的一种方式,就是semi join,也就是半连接。这个半连接其实就是 有一个子查询语句:
    select from t1 where x1 in (select x2 from t2 where x3=xxx),此时其实可能会在底层把他转化为一个半连接,类似下面的语句:
    select
    from t1 semi join t2 on t1.x1=t2.x2 and t2.x3=xxx,
    当然,其实semi join只是MySQL内核里使用的一种方式,上面的semi join语句 是和 IN语句+子查询的语义是完全一样的,对于t1表而言,只要在t2表里符合 t1.x1=t2.x2 和 t2.x3=xxx两个条件就可以了,就可以把t1表的数据筛选出来了。
    其实semi join只简单提下概念就可以了,他有适用的场景和不适用的场景。

    (2)总结
    比较崇尚的是尽量写简单的SQL,复杂的逻辑用Java系统来实现,SQL能单表查询就不要多表关联,能多表关联就尽量别写子查询,能写几十行SQL就别写几百行SQL,多考虑用Java代码在内存里实现一些数据的复杂逻辑计算,而不是都放在SQL里做。
    其实只要SQL尽量简单,每条SQL都走建立好的索引,数据库性能都不是什么大问题,当然SQL高级调优也是必须掌握的。