暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
达梦干货分享之组合索引中列的顺序问题
485
5页
12次
2020-04-06
免费下载
组合索引中列的顺序问题
组合索引中列的顺序对执行计划的影响比较大下面先简单介绍组合索引的适用场景,后面
再根据一个具体 SQL 说组合索引中列的顺序对 DM7 执行计划的影响。
1、使用组合索引查询的场
兹有 Index (A,B,C) ——组合索引多字段是有序的,并且是个完整的 BTree 引。
下面条件可以用该组合索引查询
A>5
A=5 AND B>6
A=5 AND B=6 AND C=7
A=5 AND B IN (2,3) AND C>5
下面条件将不能用该组合索引查询:
B>5 ——查询条件不包含组合索引首列字
B=6 AND C=7 ——查询条件不包含组合索引首列字
下面条件将能用部分组合索引查询:
A>5 AND B=2 ——当范围查询使用第一列,查询条件仅仅能使用第一列
A=5 AND B>6 AND C=2 ——范围查询使用第二列,查询条件仅仅能使用前二列
2、使用组合索引排序的各种场景
兹有组合索引 Index(A,B)
下面条件可以用该组合索引排序
ORDER BY A——首列排序
A=5 ORDER BY B——第一列过滤后第二列排序
ORDER BY A DESC, B DESC——注意,此时两列以相同顺序排序
A>5 ORDER BY A——数据检索和排序都在第一列
下面条件不能用该组合索引排序
ORDER BY B ——排序在索引的第二列
A>5 ORDER BY B ——范围查询在第一列,排序在第二列
A IN(1,2) ORDER BY B ——理由同上
ORDER BY A ASC, B DESC ——注意,此时两列以不同顺序排序
3、组合索引的执行计划的影响
先看一条查询 SQL
SELECT count(*) FROM UCAP_DEPT
WHERE DEPT_UNID = '00000000000000000000000000000000' OR
( DEPT_BELONGTO = '00000000000000000000000000000000' AND
DEPT_TYPE = '2' )
OR ( DEPT_BELONGTO IN
( SELECT T.DEPT_UNID
FROM UCAP_DEPT T
WHERE T.DEPT_BELONGTO =
'00000000000000000000000000000000' AND T.DEPT_TYPE = '2'
)
) ;
SQL UCAP_DEPT
DEPT_BELONGTO 能够过滤很多记录,这 SQL 最好的计划应该是先将
SELECT T.DEPT_UNID FROM UCAP_DEPT T WHERE T.DEPT_BELONGTO =
'00000000000000000000000000000000' AND T.DEPT_TYPE = '2'
的结果查询出来,然后再进行后续查询。
先建索引:
create index IDX_UCAP_DEPT_TO_TYPE on
ucap_price.UCAP_DEPT(DEPT_BELONGTO,DEPT_TYPE,DEPT_UNID);
sp_index_stat_init('UCAP_PRICE','IDX_UCAP_DEPT_TO_TYPE');
看看执行计划:
of 5
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

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