转载

达梦查询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进行优化时,不知道如何优化和选择时,可将上述方法进行测试。

来源:https://www.rstk.cn/news/234189.html?action=onClick

正文到此结束