为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM7
【操作系统】:
【CPU】:
【问题描述】*:
CREATE TABLE "SYSDBA"."TEST_JYGL_XNY_JJJY_JSDLQX"
(
"FDDYID" VARCHAR2(50) NOT NULL,
"MONTH" VARCHAR2(50) NOT NULL,
"PDATE" DATE NOT NULL,
"POINT" INTEGER NOT NULL,
"DL" DECIMAL(22,6),
"BASETYPE" VARCHAR2(50),
"CREATEDATE" DATETIME(6) NOT NULL,
"JYTYPE" VARCHAR2(50),
"BIDSIGN" DECIMAL(22,0),
CLUSTER PRIMARY KEY("FDDYID", "PDATE", "POINT", "MONTH", "CREATEDATE")) STORAGE(ON "MAIN", CLUSTERBTR) ;
#先创建空表(包括聚簇联合主键索引)
然后再创建month单列索引,然后点击表点击更新统计信息,
然后插入3条数据,
另外一种情形:我创建表后,不更新统计信息,依次执行:
插入数据->创建month单列索引->select * xxx。
此时执行EXPLAIN SELECT * FROM SYSDBA.TEST_JYGL_XNY_JJJY_JSDLQX WHERE fddyid='FFXXX1' and pdate='2022-06-25' 联合聚簇主键索引有效CSEK,但是执行
EXPLAIN SELECT * FROM SYSDBA.TEST_JYGL_XNY_JJJY_JSDLQX WHERE MONTH='2022-10',month列不走索引.
那请问如何让第二个month索引生效?

没有收集统计信息之前,优化器不知道你表里数据的分布情况,会优先选择开销小的执行计划(比如走month列索引),当你执行了统计信息收集后,优化器发现你需要select * 且走month列索引后回表导致开销比直接走聚集索引扫描开销更大后,优化器自然会选择走开销更小的执行计划,后面的空行不需要返回值,优化器自然选择走month列索引开销更小