我目前使用以下查询,由于数据量较大(约14个月),返回结果需要大约8分钟。请问有什么方法可以加快速度吗?
所涉及的数据库是MySQL,使用的是InnoDb引擎。
select
CUSTOMER as CUST,
SUM(IF(PAGE_TYPE = 'C',PAGE_TYPE_COUNT,0)) AS TOTAL_C,
SUM(IF(PAGE_TYPE = 'D',PAGE_TYPE_COUNT,0)) AS TOTAL_D
from
PAGE_HITS
where
EVE_DATE >= '2016-01-01' and EVE_DATE <= '2016-01-05'
and SITE = 'P'
and SITE_SERV like 'serv1X%'
group by
CUST
数据按6个月进行分区。每个进入where子句的列都被索引。有相当多的索引,这里不方便一一列举。因此,只能用简洁的语言进行总结。就这个查询而言,
EVE_DATE + PAGE_TYPE_COUNT
是复合索引之一,CUST + SITE_SERV + EVE_DATE
、EVE_DATE + SITE_SERV
、EVE_DATE + SITE
也是如此。主键实际上是一个虚拟自增数字。说实话,它没有被使用。我无法访问解释计划。我会尽力为此做到最好。
如果您能提供任何帮助来改善这个问题,我将不胜感激。
SITE_SERV like 'serv1X%'
移至外部查询。 - artmSELECT
查询的EXPLAIN
,很难(甚至不可能)确定哪些部分可以改进。 - Arjan