为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8
【操作系统】:WINDOWS10
【CPU】: intel
【问题描述】*:
sql语句
SELECT "area_code" as "area_code", "occur_period_year" as "year", "occur_period_month" as "month", "index_value" as "value", "unit_use" as "unit", "index_code" as "index_code", "dim_cal" as "dim_cal"
FROM "macro_index_data"
WHERE "index_code" = 'gmjj_jjzl_01'
AND "dim_cal" = 'JDZ'
AND "dim_dur" = 'DNLJ'
AND ("dim_extra" = '' or "dim_extra" is null)
AND "occur_period_month" IN(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
AND "area_code" IN('440300000000')
ORDER BY "occur_period_year" desc, "occur_period_month" desc
执行计划
索引信息
请问该如何优化呢?最好是能从数据库方面下手,改动sql语句需要其它同事参与,会耗时较久[苦涩]
这个表上的很多索引应该都是不需要的,比如indexYear,indexMon,label等等,这些值的过滤性一般不好。
且这种年月日的一般在组合起来使用,可以考虑建组合索引
看看index_code" = ‘gmjj_jjzl_01’ 和 dim_cal = 'JDZ’的过滤性
可以建个组合索引,
create index uix_index_code_dim_cal on macro_index_data(index_code,dim_cal);