暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
达梦干货分享之组合索引在DM7中的使用情况
485
4页
10次
2020-04-06
免费下载
组合索引在 DM7 中的使用情况
在实际工作中,为了提高表查询的效率,我们会在表上创建各种索引。但是,
时候我们虽然创建了组合索引,查询效率并没有提高,这是为什么呢?本文将带
大家一探究竟。
实验背景:
1、确认数据库版本
DM Database Server x64 V7.1.6.46-Build(2018.02.08-89107)ENT
2、创建测试用表并录入测试数据
表结构如下
create table TEST(id int primary key,
student_name varchar(20),math int,english int,science int);
并录入 10000 条测试数据,具体步骤可参考上一期干货分享 DM7 中产生随机
数据的方法。
3、创建索引
CREATE INDEX "index_test" ON "SYSDBA"."TEST"("MATH" ASC,"ENGLISH"
ASC,"SCIENCE" ASC) STORAGE(ON "MAIN") ;
这个组合索引中,列的顺序为
MATH,ENGLISH,SCIENCE
实验考虑以下四种情况:
一. 3 个字段都是等值查询,例如
select * from "SYSDBA"."TEST" where MATH = 60 and SCIENCE = 60 and
ENGLISH = 60
查询执行计划如下:
1 #NSET2: [0, 1, 72]
2 #PRJT2: [0, 1, 72]; exp_num(6), is_atom(FALSE)
3 #BLKUP2: [0, 1, 72]; index_test(TEST)
4 #SSEK2: [0, 1, 72]; scan_type(ASC), index_test(TEST),
scan_range[(60,60,60),(60,60,60)]
这里是直接从索引中调取的结果
二. MATH 不等值,ENGLISH 和 SCIENCE 两列等值例
select * from "SYSDBA"."TEST" where MATH not in 60 and ENGLISH =
60 and SCIENCE=60;
通过执行计划可以看出并没有调用到索引。
1 #NSET2: [1, 1, 72]
2 #PRJT2: [1, 1, 72]; exp_num(6), is_atom(FALSE)
3 #SLCT2: [1, 1, 72]; (TEST.ENGLISH = 60 AND TEST.SCIENCE = 60
AND TEST.MATH <> 60)
4 #CSCN2: [1, 10000, 72]; INDEX33555484(TEST)
三. MATH 和 ENGLISH 等值,第三列 SCIENCE 不等值,例如:
select * from "SYSDBA"."TEST" where MATH = 60 and ENGLISH = 60 and
SCIENCE not in 60;
执行计划有调用到 index_test 索引查询出 MATH=60 and ENGLISH=60 的所
有值,再从里面选择出 science<>60 的值
1 #NSET2: [0, 1, 72]
2 #PRJT2: [0, 1, 72]; exp_num(6), is_atom(FALSE)
of 4
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜