达梦查询sql优化几种方式

问题描述

在近做项目的过程中遇到了达梦查询sql 性能过慢问题,把平常在MySQL和Oracle中一些优化方法拿到达梦这边来使用,发现效果是比较小的,最终通过查阅资料发现了达梦优化sql的方式和MySQL和Oracle会有一些不一样,下面就简单对我在工作中优化的一些方法分享出来。
在这里插入图片描述

这是一段简单的测试sql,数据量大概在百万级左右,
1、可以看到在最左边执行sql的查询速度达到了50.795秒,这是优化前的查询速度;
2、通过在最外层查询字段中前加/*+ADAPTIVE_NPLN_FLAG(0) OPTIMIZER_MODE(0)*/ 发现查询sql的速度只有0.112秒。
3、通过在最外层查询字段中前加/*+no_use_cvt_var*/ 发现查询sql的速度只有0.112秒。

示例

1、no_use_cvt_var:不考虑变量改写方式实现连接;

select /*+no_use_cvt_var*/ id,name from user;

2、ADAPTIVE_NPLN_FLAG:是否启用自适应计划机制 ,OPTIMIZER_MODE=0:表示使用老优化器模式,最主要的不同在于:老优化器采用卡特兰树方式探测最优计划;新优化器模式采用左深二叉树方式探测最优计划。

select /*+ADAPTIVE_NPLN_FLAG(0) OPTIMIZER_MODE(0)*/ id,name from user;

3、STAT(表名, 行数):统计信息提示只能针对基表设置,视图和派生表等对象设置无效。如果表对象存在别名则必须使用别名。行数只能使用整数,或者整数+K(千),整数+M(百万),整数+G(十亿)。

select /*+STAT(user,1)*/ id,name from user;

行数提示设置后,统计信息的其它内容也会做相应的调整。
4、ENABLE_INDEX_JOIN(0):针对过滤条件列存在于组合索引,优先完成组合索引过滤性再回表(意思:先索引扫描过滤组合索引的前导列,再普通过滤组合索引列后续列)

select  /*+ENABLE_INDEX_JOIN(0)*/ id,name from user;

总结

在进行达梦sql进行优化时,不知道如何优化和选择时,可将上述方法进行测试。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农辰南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值