我有一个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/