如何快速计算大表?

Mat*_*ick 4 mysql sql query-optimization aggregate-functions

我有大量MySQL表,有数十万行.

我需要在客户表上编写一个查询,该表可以获得客户何时可以再次联系的计数.

例如.

SELECT 'This week', COUNT(*) FROM customers 
WHERE sales_person_id = 1 AND DATEDIFF(NOW(), available_date) < 7

UNION

SELECT 'Next week', COUNT(*) FROM customers 
WHERE sales_person_id = 1 AND DATEDIFF(NOW(), available_date) >= 7 
    AND DATEDIFF(NOW(), available_date) < 14

UNION

... (a few more like this)
Run Code Online (Sandbox Code Playgroud)

在不同的大表上编写了类似的查询后,我注意到将引擎从InnoDB更改为MyISAM大大增加了查询(这些表不需要InnoDB,因为它们没有外键检查).我还能做些什么来加速这样的计数(除了索引相应的字段)?

Mch*_*chl 5

WHERE sales_person_id = 1 AND available_date BETWEEN CURDATE() - INTERVAL 1 WEEK AND CURDATE()

这样做应该让MySQL使用在(sales_person_id, available_date)列上创建的复合索引(使用EXPLAIN来检查)