以下是SQL, 执行效率很低, 请教该如何优化? 谢谢!
SELECT DISTINCT tpc.categoryuid, tc.name FROM TPRODCATEGORY tpc INNER JOIN TCATEGORY tc ON tpc.categoryuid=tc.uid_pk WHERE tpc.productuid IN (SELECT DISTINCT p.uid_pk FROM TPRODCATEGORY pc INNER JOIN TPRODUCT p ON p.uid_pk=pc.productuid INNER JOIN TPRODUCTVAR pv ON p.uid_pk=pv.productuid WHERE pc.categoryuid=1742) 
AND tpc.categoryuid IN (SELECT c.uid_pk FROM TCATEGORY c WHERE c.parentcategory=1712) AND tpc.disabled=0 AND tpc.deleted=0 ORDER BY tc.name

解决方案 »

  1.   

    用 join 替换一下 IN
    用explain 看一下优化的执行计划。
    看看索引有没有。
      

  2.   

    SELECT DISTINCT tpc.categoryuid, tc.name FROM TPRODCATEGORY tpc INNER JOIN TCATEGORY tc ON tpc.categoryuid=tc.uid_pk
    inner join 
    (SELECT DISTINCT p.uid_pk FROM TPRODCATEGORY pc INNER JOIN TPRODUCT p ON p.uid_pk=pc.productuid INNER JOIN TPRODUCTVAR pv ON p.uid_pk=pv.productuid WHERE pc.categoryuid=1742) b1
    on tpc.productuid=b1.uid_pk
    inner join
    (SELECT c.uid_pk FROM TCATEGORY c WHERE c.parentcategory=1712) c1
    on tpc.categoryuid=c1.uid_pk
    where 
    tpc.disabled=0 AND tpc.deleted=0 ORDER BY tc.name 
      

  3.   

    SELECT DISTINCT tpc.categoryuid, tc.name 
    FROM TPRODCATEGORY tpc INNER JOIN TCATEGORY tc ON tpc.categoryuid=tc.uid_pk 
    INNER JOIN TPRODUCT p ON p.uid_pk=tpc.productuid 
    INNER JOIN TPRODUCTVAR pv ON p.uid_pk=pv.productuid 
    INNER JOIN TCATEGORY c ON tpc.categoryuid=c.uid_pk 
    WHERE tpc.categoryuid=1742
    AND c.parentcategory=1712
    AND tpc.disabled=0 
    AND tpc.deleted=0 
    ORDER BY tc.name
      

  4.   

    ACMAIN_CHM 写语句很规范,我们应该多向他学习,简单明了!