当前位置: 首页 > news >正文

# 达梦sql查询 Sql 优化

达梦sql查询 Sql 优化

文章目录

  • 达梦sql查询 Sql 优化
    • 注意点
    • 测试数据
    • 单表查询 Sort 语句优化
      • 优化过程
    • 多表关联SORT 优化
    • 函数索引的使用

注意点

  • 关于优化过程中工具的选用,推荐使用自带的DM Manage,其它工具在查看执行计划等时候不明确
  • 在执行计划中命中顺序是左右边最上边优先执行,同一级上面的先执行

在这里插入图片描述

测试数据

  • 本次测试的DM8数据库版本号如下:SELECT * FROM v$version
    在这里插入图片描述

  • 主表

-- SYSDBA.TABLE_CLASS_TEST definitionCREATE TABLE SYSDBA.TABLE_CLASS_TEST (ID VARCHAR(100) NOT NULL,NAME VARCHAR(100) NULL,CODE VARCHAR(100) NULL,TITLE VARCHAR(100) NULL,CREATETIME TIMESTAMP NULL,COLUMN1 VARCHAR(100) NULL,COLUMN2 INTEGER NULL,COLUMN3 VARCHAR(100) NULL,COLUMN4 VARCHAR(300) NULL,COLUMN5 VARCHAR(400) NULL,COLUMN6 VARCHAR(100) NULL,COLUMN7 VARCHAR(10) NULL,CONSTRAINT TAVBLE_CLASS_TEST_PK PRIMARY KEY (ID)
);
CREATE UNIQUE INDEX INDEX33557764 ON SYSDBA.TABLE_CLASS_TEST (ID);
  • 子表
CREATE TABLE "SYSDBA"."TABLE_CLASS_TEST_CHILD"
(
"ID" VARCHAR(100) NOT NULL,
"NAME" VARCHAR(100),
"CODE" VARCHAR(100),
"TITLE" VARCHAR(100),
"CREATETIME" TIMESTAMP(6),
"COLUMN1" VARCHAR(100),
"COLUMN2" INTEGER,
"COLUMN3" VARCHAR(100),
"COLUMN4" VARCHAR(300),
CONSTRAINT "TABLE_CLASS_TEST_CHILD" NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
  • 使用的sql工具达梦自带的客户端工具 DM MANAGER

单表查询 Sort 语句优化

  • 对于单表查询含有order bySQL,去掉SORT比较简单,创建对应的索引即可。

优化过程

  • 执行sql执行计划
explain
select * from table_class_test where code ='3' order by createtime desc,code desc
  • CSCN2

在这里插入图片描述

  • 给排序字段创建联合排序索引
create index "SYSDBA"."TABLE_CLASS_TEST_ORDER_BY_INDEX1" on "SYSDBA"."TABLE_CLASS_TEST"("CODE" desc,"CREATETIME" desc);
  • 更新表索引信息
sp_index_stat_init('SYSDBA','TABLE_CLASS_TEST_ORDER_BY_INDEX1');
  • 再次执行sql计划如下,命中排序索引,Sort部分被优化了

在这里插入图片描述

多表关联SORT 优化

  • join部分列没有索引全表扫描了
explain
select x.*,y.* from table_class_test x join table_class_test_child y on x.code=y.code
where x.code='3'
order by x.code desc

在这里插入图片描述

  • 给子表code俩个表关联的列增加索引
create index "SYSDBA"."table_class_test_child_code_index1" 
on "SYSDBA"."TABLE_CLASS_TEST_CHILD"("CODE");sp_index_stat_init('SYSDBA','table_class_test_child_code_index1');

在这里插入图片描述

  • 都命中了索引

函数索引的使用

  • 达梦可以创建函数索引,在某些业务中可以考虑使用函数索引例如下面的语句
select * from table_class_test where COLUMN3='3'select * from table_class_test where IFNULL(COLUMN3,'-')='3'
  • 创建函数索引
CREATE  INDEX "column3_ifnull_index" ON "SYSDBA"."TABLE_CLASS_TEST"("IFNULL"(COLUMN3, '-')) STORAGE(ON "MAIN", CLUSTERBTR) ;

在这里插入图片描述

http://www.lryc.cn/news/338960.html

相关文章:

  • Linux下SPI驱动:SPI设备驱动简介
  • 【简明图文教程】Node.js的下载、安装、环境配置及测试
  • 共模电感饱和与哪些参数有关?这些参数是如何影响共模电感的?
  • 儿童护眼台灯怎么选?五款必选的高口碑护眼台灯推荐
  • 前端小技巧之轮播图
  • 手动实现简易版RPC(上)
  • 大语言模型总结整理(不定期更新)
  • 关于npm和yarn的使用(自己的问题记录)
  • Web端Excel的导入导出Demo
  • Java日期正则表达式(附Demo)
  • 基于LabVIEW的CAN通信系统开发案例
  • SAP SD学习笔记07 - 紧急发注(急单),现金贩卖,贩卖传票Type/ 明细Category 及其Customize
  • (六)C++自制植物大战僵尸游戏关卡数据讲解
  • Java基于微信小程序的校园外卖平台设计与实现,附源码
  • 渗透工具及其知识库(个人笔记)
  • MongoDB的使用
  • labview中FP.isFrontmost不生效?
  • Vela-OS: 记录一个class层,处理MSC协议的bug
  • 跨框架探索:React Redux 和 Vuex 对比分析快速掌握React Redux
  • 第十五届蓝桥杯省赛C/C++大学B组真题及赛后总结
  • 【Qt踩坑】ARM 编译Qt5.14.2源码-QtWebEngine
  • SQL语法 case when语句用法讲解
  • Project Euler_Problem 193_Few Repeated Digits_欧拉筛+容斥公式
  • 排序算法-基数排序
  • ChatGPT在线网页版
  • 5.SpringSpringBoot八股
  • 0基础刷图论最短路 3(从ATcoder 0分到1800分)
  • k8s+docker一键安装过程
  • Python3+Appium+Android SDK+真机+实现app自动化测试-基于Red Hat7.9版本搭建环境及运行python脚本。
  • 深入理解MD5算法:原理、应用与安全