【问题标题】:Optimize a simple JOIN or IN query优化简单的 JOIN 或 IN 查询
【发布时间】:2010-10-07 08:32:54
【问题描述】:

我有这个问题:

SELECT DISTINCT id, 
                label 
FROM   bbproduct_cust 
WHERE  CUSTNO IN (SELECT CUSTNO 
                  FROM   customer 
                  WHERE  SLSRPTGRP = '1996') 
       AND DEPTNO = '0' 
ORDER  BY label ASC 

EXPLAIN 显示

id  select_type         table           type  possible_keys          key            key_len  ref    rows   Extra                                         
1   PRIMARY             bbproduct_cust  ALL   ind_deptno                                            91834  Using where; Using temporary; Using filesort  
2   DEPENDENT SUBQUERY  customer        ref   PRIMARY,ind_slsrptgrp  ind_slsrptgrp  3        const  4      Using where                                   

这需要 2-3 秒,我需要对其进行优化。

我有什么选择?

【问题讨论】:

    标签: sql mysql join subquery


    【解决方案1】:

    使用 INNER JOIN,而不是 IN 选择

    类似

    SELECT DISTINCT id, 
                    label 
    FROM   bbproduct_cust INNER JOIN
            customer ON  bbproduct_cust.CUSTNO = customer.CUSTNO
    WHERE  SLSRPTGRP = '1996'
           AND DEPTNO = '0' 
    ORDER  BY label ASC
    

    【讨论】:

    • 那么您似乎在表 bbproduct_cust 上没有正确的索引
    【解决方案2】:

    使用 INDEX 来提高性能。 Click here 了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      相关资源
      最近更新 更多