丹阳建站推广管理,网站建设的3个阶段,做网站维护累吗,天工网工程新希望官网达梦sql查询 Sql 优化 文章目录 达梦sql查询 Sql 优化注意点测试数据单表查询 Sort 语句优化优化过程 多表关联SORT 优化函数索引的使用 注意点 
关于优化过程中工具的选用#xff0c;推荐使用自带的DM Manage#xff0c;其它工具在查看执行计划等时候不明确在执行计划中命中…达梦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 by的SQL去掉SORT比较简单创建对应的索引即可。 
优化过程 
执行sql执行计划 
explain
select * from table_class_test where code 3 order by createtime desc,code descCSCN2 给排序字段创建联合排序索引 
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.codey.code
where x.code3
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 COLUMN33select * from table_class_test where IFNULL(COLUMN3,-)3创建函数索引 
CREATE  INDEX column3_ifnull_index ON SYSDBA.TABLE_CLASS_TEST(IFNULL(COLUMN3, -)) STORAGE(ON MAIN, CLUSTERBTR) ;