gpt4 book ai didi

MYSQL 不使用创建的索引

转载 作者:行者123 更新时间:2023-11-30 22:57:28 24 4
gpt4 key购买 nike

我有一个带有聚簇索引的表。

Index(region_cd, Activity_mth, HR_rollup, sls_dist_chnl_type_cd) called REGION_CD_3
Index(Activity_mth)

当我执行下面的查询时

EXPLAIN EXTENDED SELECT 
ACTIVITY_MTH,
SUM(CASE WHEN m2m_ind = 'N' THEN TOT_GA ELSE 0 END) AS GA,
SUM(CASE WHEN m2m_ind = 'N' THEN TOT_GA_PY ELSE 0 END)
FROM
b2b_dashboard_data_dly
WHERE region_cd = 'PH'
AND ACTIVITY_MTH BETWEEN '2014-04-01' AND '2014-09-30'
AND HR_ROLLUP = 'historical'
AND SLS_DIST_CHNL_TYPE_CD = 'b2b'
GROUP BY ACTIVITY_MTH

我收到以下针对 EXPLAIN 的响应。

id  | select_type   | table                  | type         | possible_keys                                                                                                                                                           -                 | key                                           | key_len   | ref   | rows  | filtered  | Extra
1 | SIMPLE | b2b_dashboard_data_dly | index_merge |REP_HR_EMP_ID,MGR_HR_EMP_ID,AD_HR_EMP_ID,REGION_CD,AREA_CD,ACTIVITY_MTH,HR_ROLLUP,REGION_CD_2,SLS_DIST_CHNL_TYPE_CD,REP_HR_EMP_ID_3,MGR_HR_EMP_ID_3,AD_HR_EMP_ID_3,REGION_CD_3,AREA_CD_3 | REGION_CD_2,HR_ROLLUP,SLS_DIST_CHNL_TYPE_CD | 93,33,48 | null | 11480 | 75 | Using intersect(REGION_CD_2,HR_ROLLUP,SLS_DIST_CHNL_TYPE_CD); Using where; Using temporary; Using filesort

为什么我的索引 REGION_CD_3 没有被使用?我如何优化这个查询和我的索引?

最佳答案

在这个查询中,只有该索引的前两列是有用的,因为范围查询是针对索引的第二列。必须扫描最后两列中的值。

更改索引定义以将范围列移动到末尾:

(region_cd, HR_rollup, sls_dist_chnl_type_cd, Activity_mth)

此外,更改 group by 子句以将 Activity_mth 放在最后并按索引顺序引用所有其他列。

GROUP BY region_cd, HR_rollup, sls_dist_chnl_type_cd, Activity_mth

这应该为优化器提供一个理想的查询索引,并提示它可以通过读取此索引而不是任何其他索引来避免大量不必要的工作。

关于MYSQL 不使用创建的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com