【发布时间】:2023-04-08 09:52:01
【问题描述】:
我目前使用以下查询,由于数据量大,大约需要 8 分钟才能返回结果(大约 14 个月)。请问有什么办法可以加快速度吗?
有问题的数据库是带有 InnoDb 引擎的 MySQL
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%'移动到外部查询。 -
如果没有
EXPLAIN的SELECT查询,就很难(如果不是不可能的话)判断哪些部分可以改进。
标签: mysql sql query-optimization