oracle sql 索引优化一例
2017-10-27 10:34
671 查看
需要sql语句:
看下每个列的重复值情况
这两列是数据是明显缺少位图索引的列。且这张表主要用于查询
那么位图索引是显然的选择了
上述位图索引建好后,大小在30M以下
普通列建B树索引
该索引建好后大小为:
2.36 GB
B树索引还是占空间的
优化后的sql执行计划
实际观察一下,将一条一个小时跑不出来的sql优化到300ms,提示何止1000倍呢。我们用很小的空间代价,换来极大的性能提升。
不过这只是oracle sql优化一个很简单的例子
SELECT * FROM cux.CUX_SETT_XLA_LINES V WHERE V.SOURCE_CODE = 'STR' AND v.created_by = 0 AND v.accounting_date =DATE '2017-10-25' ORDER BY V.CREATION_DATE DESC;
Plan hash value: 2341381659 ------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 4826 | 975K| | 1053K (2)| 03:30:46 | | 1 | SORT ORDER BY | | 4826 | 975K| 1624K| 1053K (2)| 03:30:46 | |* 2 | TABLE ACCESS FULL| CUX_SETT_XLA_LINES | 4826 | 975K| | 1053K (2)| 03:30:43 | ------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter("V"."ACCOUNTING_DATE"=TO_DATE(' 2017-10-25 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "V"."CREATED_BY"=0 AND "V"."SOURCE_CODE"='STR')
看下每个列的重复值情况
select count(distinct SOURCE_CODE) from cux.CUX_SETT_XLA_LINES -- 9 select count(distinct created_by) from cux.CUX_SETT_XLA_LINES -- 13
这两列是数据是明显缺少位图索引的列。且这张表主要用于查询
那么位图索引是显然的选择了
SQL> create bitmap index i_x_sc on CUX_SETT_XLA_LINES(SOURCE_CODE) 2 / Index created. SQL> analyze index i_x_sc 2 validate structure 3 / Index analyzed. SQL> show user USER is "CUX" SQL> create bitmap index inx_create on CUX_SETT_XLA_LINES(created_by) 2 / Index created.
上述位图索引建好后,大小在30M以下
普通列建B树索引
SQL> create index inx_accdate on CUX_SETT_XLA_LINES (accounting_date); Index created.
该索引建好后大小为:
2.36 GB
B树索引还是占空间的
优化后的sql执行计划
Plan hash value: 1948297352 ---------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 4826 | 975K| | 3536 (1)| 00:00:43 | | 1 | SORT ORDER BY | | 4826 | 975K| 1624K| 3536 (1)| 00:00:43 | | 2 | TABLE ACCESS BY INDEX ROWID | CUX_SETT_XLA_LINES | 4826 | 975K| | 3315 (1)| 00:00:40 | | 3 | BITMAP CONVERSION TO ROWIDS | | | | | | | | 4 | BITMAP AND | | | | | | | |* 5 | BITMAP INDEX SINGLE VALUE | INX_CREATE | | | | | | |* 6 | BITMAP INDEX SINGLE VALUE | I_X_SC | | | | | | | 7 | BITMAP CONVERSION FROM ROWIDS| | | | | | | |* 8 | INDEX RANGE SCAN | INX_ACCDATE | 579K| | | 1555 (1)| 00:00:19 | ---------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - access("V"."CREATED_BY"=0) 6 - access("V"."SOURCE_CODE"='STR') 8 - access("V"."ACCOUNTING_DATE"=TO_DATE(' 2017-10-25 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
实际观察一下,将一条一个小时跑不出来的sql优化到300ms,提示何止1000倍呢。我们用很小的空间代价,换来极大的性能提升。
不过这只是oracle sql优化一个很简单的例子
相关文章推荐
- Oracle SQL优化之使用索引提示一例
- Oracle 建立索引及SQL优化
- Oracle 建立索引及SQL优化
- Oracle 建立索引及SQL优化
- 基于索引的SQL语句优化和导入导出Oracle表
- Oracle 建立索引及SQL优化
- Oracle 建立索引及SQL优化
- oracle的sql优化-oracle的索引介绍原理浅析(B-Tree索引)
- Oracle 建立索引及利用索引的SQL语句优化
- 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)
- Oracle之SQL优化-索引的基本原理(二)
- oracle的索引类型及sql优化总结(一)
- oracle sql中涉及is null时如何优化(索引创建和直方图)
- Oracle 索引及SQL优化
- oracle sql优化案例1(使用组合索引)
- Oracle sql 优化の索引监控
- Oracle之SQL优化-索引的基本原理(一)
- Oracle 建立索引及SQL优化
- Oracle SQL的调优及表、索引的设计和优化
- Oracle SQL的调优及表、索引的设计和优化