达梦数据库SQL优化案例

聚集索引:数据和索引信息是存放到一起的,表的数据行都存放在索引树的叶子节点上。

非聚集索引:叶子节点存放的实际上是存放数据库的指针,需要先查询一遍,得到索引文件,根据索引获取数据。

因此聚集索引中获取数据通常比非聚集索引快,但是更新的代价更大。

操作符说明:

SQL优化案例

-------------------------------------------------------------------------------------------------------------------------

函数索引:

SQL> EXPLAIN select * from ZHANGXIAOJIANG.EMPLOYEES where to_char(HIRE_DATE,'yyyy-mm-dd') ='2022-12-16';

1   #NSET2: [3, 500, 355]

2     #PRJT2: [3, 500, 355]; exp_num(10), is_atom(FALSE)

3       #SLCT2: [3, 500, 355]; exp11 = '2022-12-16'

4         #CSCN2: [3, 20000, 355]; INDEX33555620(EMPLOYEES); btr_scan(1)

已用时间: 1.152(毫秒). 执行号:0.

SQL> create index idx_func_emp on ZHANGXIAOJIANG.EMPLOYEES(to_char(HIRE_DATE,'yyyy-mm-dd'));

操作已执行

已用时间: 279.993(毫秒). 执行号:19509.

SQL> EXPLAIN select * from ZHANGXIAOJIANG.EMPLOYEES where to_char(HIRE_DATE,'yyyy-mm-dd') ='2022-12-16';

1   #NSET2: [1, 500, 355]

2     #PRJT2: [1, 500, 355]; exp_num(10), is_atom(FALSE)

3       #BLKUP2: [1, 500, 355]; idx_func_emp(EMPLOYEES)

4         #SSEK2: [1, 500, 355]; scan_type(ASC), idx_func_emp(EMPLOYEES), scan_range['2022-12-16','2022-12-16'], is_global(0)

已用时间: 1.512(毫秒). 执行号:0.


复合索引:

SQL> explain SELECT *

FROM zhangxiaojiang.EMPLOYEES

WHERE  SALARY = 15000 and EMPLOYEE_ID > 9395;2   3   

1   #NSET2: [3, 248, 355]

2     #PRJT2: [3, 248, 355]; exp_num(10), is_atom(FALSE)

3       #SLCT2: [3, 248, 355]; (EMPLOYEES.SALARY = var1 AND EMPLOYEES.EMPLOYEE_ID > var2) SLCT_PUSHDOWN(TRUE)

4         #CSCN2: [3, 20000, 355]; INDEX33555620(EMPLOYEES) NEED_SLCT(TRUE); btr_scan(1)

已用时间: 1.755(毫秒). 执行号:0.

SQL> create index emp_salary_id ON ZHANGXIAOJIANG.EMPLOYEES(SALARY,EMPLOYEE_ID);

操作已执行

已用时间: 84.182(毫秒). 执行号:19511.

SQL> explain SELECT *

FROM zhangxiaojiang.EMPLOYEES

WHERE  SALARY = 15000 and EMPLOYEE_ID > 9395;2   3   

1   #NSET2: [1, 248, 355]

2     #PRJT2: [1, 248, 355]; exp_num(10), is_atom(FALSE)

3       #BLKUP2: [1, 248, 355]; emp_salary_id(EMPLOYEES)

4         #SSEK2: [1, 248, 355]; scan_type(ASC), emp_salary_id(EMPLOYEES), scan_range((exp_cast(15000),exp_cast(9395)),(exp_cast(15000),max)), is_global(0)

已用时间: 1.491(毫秒). 执行号:0.

SQL>


创建位图索引 位图索引适用于低基数列(即列中不同值的数量较少),例如性别、状态

SQL> EXPLAIN select * from ZHANGXIAOJIANG.PROJECTS where status='Planning' and BUDGET > 3600000;

1   #NSET2: [3, 1405, 224]

2     #PRJT2: [3, 1405, 224]; exp_num(8), is_atom(FALSE)

3       #SLCT2: [3, 1405, 224]; (PROJECTS.STATUS = 'Planning' AND PROJECTS.BUDGET > var1) SLCT_PUSHDOWN(TRUE)

4         #CSCN2: [3, 20000, 224]; INDEX33555622(PROJECTS) NEED_SLCT(TRUE); btr_scan(1)

已用时间: 0.796(毫秒). 执行号:0.

SQL> CREATE BITMAP INDEX ZHANGXIAOJIANG.IDX_PRO ON ZHANGXIAOJIANG.PROJECTS(status);

操作已执行

已用时间: 444.573(毫秒). 执行号:19513.

SQL> EXPLAIN select * from ZHANGXIAOJIANG.PROJECTS where status='Planning' and BUDGET > 3600000;

1   #NSET2: [2, 1405, 224]

2     #PRJT2: [2, 1405, 224]; exp_num(8), is_atom(FALSE)

3       #SLCT2: [2, 1405, 224]; PROJECTS.BUDGET > var1

4         #BLKUP2: [2, 1497, 224]; INDEX33555622(PROJECTS)

5           #BMCVT: [2, 1497, 224]

6             #BMSEK: [2, 1497, 224]; scan_type(ASC), INDEX33555688(BM$_33555687), scan_range[('Planning',null2),('Planning',max))

已用时间: 1.194(毫秒). 执行号:0.

SQL>


 想更多了解达梦数据库,请关注达梦云适配中心。

达梦社区地址:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿江在达梦

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值