MYSQL不起作用-如何改进并更快地实现
我有一个CRM,其中一个查询如下:MYSQL不起作用-如何改进并更快地实现,mysql,Mysql,我有一个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
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年前就已经很旧了,除了改变这个查询,我不能碰她太多
有一个很好的建议,你们知道如何改进这个查询以获得最后的行数吗
谢谢 您可以尝试一下:
SELECT customerID
FROM sales_company
WHERE type='payment'
GROUP BY customerID
HAVING COUNT(CASE WHEN rdate BETWEEN '2016-02-01' AND '2016-02-14' THEN 1 END) = 1 AND
COUNT(CASE WHEN rdate < '2016-02-01' THEN 1 END) = 0
在customerID上有一个索引,rdate。您能发布表类型、解释以及您的查询,看看有什么问题吗
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行30次?当数据刷新时,是否有间隔或每晚?“不在查询中”是否需要很长时间?创建一个视图,其中包含减少表总大小所需的日期。需要更多帮助。该子查询在该上下文中是多余的。您可以显示sales_company表的索引定义吗?我想问一下,该子查询的目的是什么?为什么要使用DISTINCT and GROUP BY the the同一字段?有数百万行,但是我已经测试了你的查询+@juanvan关于total表的建议,现在它工作得很好!