为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:表中有1000w数据,在使用in关键字的时候,发现当in里面的参数大于5个的时候,不会走batch_Id的索引,导致查询速度非常慢,小于等于5时,查询速度非常快,请问是什么原因呢?
建表语句:
CREATE TABLE "TEST"."t_evaluation_statistics_test1"
(
"id" INT AUTO_INCREMENT NOT NULL,
"scheme_id" VARCHAR(32) DEFAULT '' NOT NULL,
"task_scheme_id" VARCHAR(32),
"task_index_id" VARCHAR(32),
"batch_id" VARCHAR(50) NOT NULL,
"type" INT,
CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) AUTO_INCREMENT = 10000001;
CREATE INDEX "t_evaluation_statistics_test1_batch_id" ON "TEST"."t_evaluation_statistics_test1"("batch_id" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ;
执行计划一:能够走索引
explain
select * from "TEST"."t_evaluation_statistics_test2"
where batch_id
in ('D#1103#0000000003', 'D#736#0000000020', 'D#1101#0000000014', 'C#1093#0000000002', 'C#19#0000000064');
1 #NSET2: [2356, 1250000, 256]
2 #PRJT2: [2356, 1250000, 256]; exp_num(7), is_atom(FALSE)
3 #NEST LOOP INDEX JOIN2: [2356, 1250000, 256]
4 #CONST VALUE LIST: [1, 5, 48]; row_num(5), col_num(1),
5 #BLKUP2: [1571, 250000, 48]; t_evaluation_statistics_test2_batch_id(t_evaluation_statistics_test2)
6 #SSEK2: [1571, 250000, 48]; scan_type(ASC), t_evaluation_statistics_test2_batch_id(t_evaluation_statistics_test2), scan_range[DMTEMPVIEW_16830778.colname,DMTEMPVIEW_16830778.colname]
执行计划二:不走索引,仅在in里面多加了一个值
explain
select *
from "TEST"."t_evaluation_statistics_test2"
where batch_id
in ('D#1103#0000000003', 'D#736#0000000020', 'D#1101#0000000014', 'C#1093#0000000002', 'C#19#0000000064','D#2272#0000007381');
1 #NSET2: [2370, 1500000, 256]
2 #PRJT2: [2370, 1500000, 256]; exp_num(7), is_atom(FALSE)
3 #HASH2 INNER JOIN: [2370, 1500000, 256]; KEY_NUM(1); KEY(DMTEMPVIEW_16830781.colname=t_evaluation_statistics_test2.batch_id) KEY_NULL_EQU(0)
4 #CONST VALUE LIST: [1, 6, 48]; row_num(6), col_num(1),
5 #CSCN2: [1475, 10000000, 208]; INDEX33565882(t_evaluation_statistics_test2)
这个问题有没有解决啊?这不是数据库bug吗?
加个hint试试呢,