求助SQL优化,优化这个sql,求助

 SELECT *
FROM ap_group_page agp
WHERE agp.compo_id IN
    (SELECT ad.compo_code
     FROM as_duty ad
     WHERE ad.duty_code IN
         (SELECT ard.duty_code
          FROM as_role_duty ard
          WHERE ard.role_id =
              (SELECT aer.role_id
               FROM as_emp_role aer
               WHERE aer.emp_code=
                   (SELECT ae.emp_code
                    FROM as_emp ae
                    WHERE ae.emp_code='liwh' ) )));

用join吧,不用总是用in
参考自:mysql join语法 http://www.data.5helpyou.com/article209.html

建议你贴出表的关键结构及需求,这样看sql语句还得脑补出表结构和需求,太麻烦了

我还没试,不知道对不对,你可以试试,我猜结构应该是如此

select * from ap_group_page a left join ad.compo_code as b on a.compo_id = b.compo_code left join as_role_duty as c on b.duty_code = c.duty_code left join as_emp_role as d on c.role_id = d.role_id left join e on d.emp_code = e.emp_code

五张表的优化。。。

建议
1.内链接代替子查询
2.exists代替in
3.加索引,和优化表结构

SELECT * FROM ap_group_page AS agp, as_duty AS ad, as_role_duty AS ard, as_emp_role AS aer, as_emp AS ae
WHERE ae.emp_code = 'liwh'
AND aer.emp_code = ae.emp_code
AND ard.role_id = aer.role_id
AND ad.duty_code IN ard.duty_code
AND agp.compo_id IN ad.compo_code;


我是菜鸟只是想按照自己的看法尝试下,毕竟没有表结构,不知道具体的SQL是想实现什么,所以只能按照现有的SQL重新组装,没办法重新编写一条。
按照我写的这个,我想把WHERE子句中的相关列加上索引。
其实如果可以的话,我更希望能重新设计下SQL,这个样子看起来不伦不类,IN这个操作性能太低了。
重申:我是菜鸟,我只是想尝试下。

使用union和内联接的组合更好吧