为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:
有一个数据表,300多万数据,SQL语句统计总数需要耗时9s,如果不统计总数,0.112s,已经建了索引。以下是SQL语句,执行计划、索引
SQL语句:
SELECT
count(sID)
FROM
sa_task
WHERE
(sStatusID='tesReady' OR sStatusID='tesExecuting' OR sStatusID='tesSleeping' OR sStatusID='tesFinished')
AND sExecutorFID LIKE '/79gLkw2r7FW3bUxiSRp.ogn%'
AND sCreateTime BETWEEN CONCAT('2025-01-01',' 00:00:00') and CONCAT('2025-12-31',' 23:59:59')
AND ifnull(sEIField42, 0) = 0
AND sKindID = 'tkTask'
执行计划:
1 #NSET2: [249, 1, 209]
2 #PRJT2: [249, 1, 209]; exp_num(1), is_atom(FALSE)
3 #AAGR2: [249, 1, 209]; grp_num(0), sfun_num(1), distinct_flag[0]; slave_empty(0)
4 #SLCT2: [249, 24063, 209]; (SA_TASK.SEXECUTORFID >= '/79gLkw2r7FW3bUxiSRp.ogn' AND SA_TASK.SEXECUTORFID < '/79gLkw2r7FW3bUxiSRp.ogo' AND SA_TASK.SSTATUSID IN LIST AND exp11 = 0)
5 #SSEK2: [249, 24063, 209]; scan_type(ASC), IDX_SA_TASK_OPT2(SA_TASK), scan_range[('tkTask',exp_cast(exp11),min,min,min,min),('tkTask',exp_cast(exp11),max,max,max,max))
索引:
CREATE INDEX IDX_SA_TASK_OPT2 ON SA_TASK(
sKindID,
sCreateTime,
sExecutorFID,
sStatusID,
sEIField42,
sID
);
你这个count查出来有多少数据?
尝试下这个索引CREATE INDEX "ind_satask_skindid" ON SA_TASK(
sKindID,
ifnull(sEIField42,0),
sCreateTime,
sStatusID,
sExecutorFID,
sID
);
看看执行计划有没有走