我有一个CRM,其中一个查询如下所示:

SELECT DISTINCT tb1.customerID
  FROM sales_company AS tb1
 WHERE rdate BETWEEN '2016-02-01'
                 AND '2016-02-14'
   AND type='payment'
   AND customerID
              NOT IN (SELECT customerID
                        FROM sales_company
                       WHERE rdate < tb1.rdate
                         AND type='payment'
                       GROUP BY customerID)
 GROUP BY customerID`

有了这个查询,我就可以知道新客户在查询期间第一次支付了多少钱。
问题是:
每个公司都有很多表,所以每次刷新都需要运行30次左右的查询。
是 啊,
我知道这很糟糕,我建立的这个系统已经很旧了(7年前),除了更改这个查询之外,我不能太多地接触她。
有一些好的建议,你们知道如何改进这个查询,以得到最后的行数吗?
谢谢!

最佳答案

你能把表格类型和解释以及你的查询贴出来看看有什么不对吗。

EXPLAIN  SELECT DISTINCT tb1.customerID
  FROM sales_company AS tb1
 WHERE rdate BETWEEN '2016-02-01'
                 AND '2016-02-14'
   AND TYPE='payment'
   AND
   NOT EXISTS (SELECT customerID
                        FROM sales_company
                       WHERE customerID = tb1.customerID
                         AND rdate < tb1.rdate
                         AND TYPE='payment'
             )
GROUP BY customerID;

我只测试了10000行

关于mysql - MYSQL NOT IN函数-如何改进并使其更快,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35386288/

10-11 01:34