Oracle 利用10053处理不走索引语句一则
2013-09-22 20:22
676 查看
语句:
执行计划:
可以看到虽然通过cookie_id查找,但仍然走的全表扫描,看下表上索引的情况
设置10053跟踪计划生成
查看跟踪文件:
***************************************
BASE STATISTICAL INFORMATION
***********************
Table Stats::
Table: DW_PAGE_VIEW_FACT Alias: A (Using composite stats)
#Rows: 4141249 #Blks: 139516 AvgRowLen: 223.00
Index Stats::
Index: IDX_PAGE_COOKIE Col#: 8
LVLS: 2 #LB: 14804 #DK: 258768 LB/K: 1.00 DB/K: 1.00 CLUF: 515320.00
UNUSABLE
Index: IND_PAGE_VIEW Col#: 10
USING COMPOSITE STATS
LVLS: 2 #LB: 36272 #DK: 448128 LB/K: 1.00 DB/K: 1.00 CLUF: 281753.00
Access path analysis for DW_PAGE_VIEW_FACT
***************************************
SINGLE TABLE ACCESS PATH
Single Table Cardinality Estimation for DW_PAGE_VIEW_FACT[A]
Column (#8):
NewDensity:0.000003, OldDensity:0.000133 BktCnt:254, PopBktCnt:30, PopValCnt:1, NDV:291648
Table: DW_PAGE_VIEW_FACT Alias: A
Card: Original: 4141249.000000 Rounded: 13 Computed: 12.52 Non Adjusted: 12.52
Access Path: TableScan
Cost: 37862.32 Resp: 37862.32 Degree: 0
Cost_io: 37787.00 Cost_cpu: 2401579483
Resp_io: 37787.00 Resp_cpu: 2401579483
Best:: AccessPath: TableScan
Cost: 37862.32 Degree: 1 Resp: 37862.32 Card: 12.52 Bytes: 0
***************************************
很不幸IDX_PAGE_COOKIE处于UNUSABLE状态,当前库之所以关于该表的语句能正常执行,是因为skip_unusable_indexes=true,
修改后会报错:
这个索引失效很可能是移动表或表压缩造成的,需要重建索引:
再次查看执行计划:
select count(1) from DW_PAGE_VIEW_FACT a where a.cookie_id='dd2a760b704e3936';
执行计划:
SQL> explain plan for select count(1) from DW_PAGE_VIEW_FACT a where a.cookie_id='dd2a760b704e3936'; Explained. SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------------- Plan hash value: 53213563 ----------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ----------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 17 | 37862 (1)| 00:07:35 | | | | 1 | SORT AGGREGATE | | 1 | 17 | | | | | | 2 | PARTITION RANGE ALL| | 12 | 204 | 37862 (1)| 00:07:35 | 1 | 630 | |* 3 | TABLE ACCESS FULL | DW_PAGE_VIEW_FACT | 12 | 204 | 37862 (1)| 00:07:35 | 1 | 630 | ----------------------------------------------------------------------------------------------- PLAN_TABLE_OUTPUT --------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("A"."COOKIE_ID"='dd2a760b704e3936') 15 rows selected.
可以看到虽然通过cookie_id查找,但仍然走的全表扫描,看下表上索引的情况
SQL> select index_name,table_name,column_name from dba_ind_columns where table_name='DW_PAGE_VIEW_FACT'; INDEX_NAME TABLE_NAME COLUMN_NAM --------------- -------------------- ---------- IND_PAGE_VIEW DW_PAGE_VIEW_FACT SESSION_ID IDX_PAGE_COOKIE DW_PAGE_VIEW_FACT COOKIE_ID
设置10053跟踪计划生成
SQL> alter session set events '10053 trace name context forever,level 1'; Session altered. SQL> select count(1) from zybi.DW_PAGE_VIEW_FACT a where a.cookie_id='dd2a760b704e3936'; COUNT(1) ---------- 26 SQL> alter session set events '10053 trace name context off'; Session altered.
查看跟踪文件:
***************************************
BASE STATISTICAL INFORMATION
***********************
Table Stats::
Table: DW_PAGE_VIEW_FACT Alias: A (Using composite stats)
#Rows: 4141249 #Blks: 139516 AvgRowLen: 223.00
Index Stats::
Index: IDX_PAGE_COOKIE Col#: 8
LVLS: 2 #LB: 14804 #DK: 258768 LB/K: 1.00 DB/K: 1.00 CLUF: 515320.00
UNUSABLE
Index: IND_PAGE_VIEW Col#: 10
USING COMPOSITE STATS
LVLS: 2 #LB: 36272 #DK: 448128 LB/K: 1.00 DB/K: 1.00 CLUF: 281753.00
Access path analysis for DW_PAGE_VIEW_FACT
***************************************
SINGLE TABLE ACCESS PATH
Single Table Cardinality Estimation for DW_PAGE_VIEW_FACT[A]
Column (#8):
NewDensity:0.000003, OldDensity:0.000133 BktCnt:254, PopBktCnt:30, PopValCnt:1, NDV:291648
Table: DW_PAGE_VIEW_FACT Alias: A
Card: Original: 4141249.000000 Rounded: 13 Computed: 12.52 Non Adjusted: 12.52
Access Path: TableScan
Cost: 37862.32 Resp: 37862.32 Degree: 0
Cost_io: 37787.00 Cost_cpu: 2401579483
Resp_io: 37787.00 Resp_cpu: 2401579483
Best:: AccessPath: TableScan
Cost: 37862.32 Degree: 1 Resp: 37862.32 Card: 12.52 Bytes: 0
***************************************
很不幸IDX_PAGE_COOKIE处于UNUSABLE状态,当前库之所以关于该表的语句能正常执行,是因为skip_unusable_indexes=true,
修改后会报错:
SQL> insert into zybi.DW_PAGE_VIEW_FACT select * from zybi.DW_PAGE_VIEW_FACT where rownum=1; insert into zybi.DW_PAGE_VIEW_FACT select * from zybi.DW_PAGE_VIEW_FACT where rownum=1 * ERROR at line 1: ORA-01502: index 'ZYBI.IDX_PAGE_COOKIE' or partition of such index is in unusable state
这个索引失效很可能是移动表或表压缩造成的,需要重建索引:
SQL> alter index zybi.IDX_PAGE_COOKIE rebuild; Index altered. SQL> select degree from dba_indexes where index_name='IDX_PAGE_COOKIE'; DEGREE ------------------------------ 1
再次查看执行计划:
SQL> explain plan for select count(1) from zybi.DW_PAGE_VIEW_FACT a where a.cookie_id='dd2a760b704e3936'; Explained. SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------ Plan hash value: 3653499665 ------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 17 | 3 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 17 | | | |* 2 | INDEX RANGE SCAN| IDX_PAGE_COOKIE | 12 | 204 | 3 (0)| 00:00:01 | ------------------------------------------------------------------------------ Predicate Information (identified by operation id): PLAN_TABLE_OUTPUT -------------------------------------------------------------------------- 2 - access("A"."COOKIE_ID"='dd2a760b704e3936') 14 rows selected.
相关文章推荐
- Oracle查询语句中指定索引时优化器及指定索引不好使的处理方法
- Oracle index】SQL语句利用函数索引注意点
- Oracle 建立索引及利用索引的SQL语句优化
- oracle 查询语句索引建议
- Oracle 11.2.0.2 exp导出错误处理一则
- Oracle利用dbms_metadata.get_ddl查看DDL语句
- oracle表不走索引,收集一下表的统计信息
- 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引
- oracle介绍之oracle不走索引的7种常见情况!
- Oracle中合理利用临时表解决in语句的优化过程
- Oracle、SQL Server、Access利用SQL语句进行高效果分页
- cx_Oracle.DatabaseError: ORA-12170: TNS:Connect timeout occurred错误处理一则
- Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数
- oracle动态sql语句处理
- MySQL如何利用索引优化ORDER BY排序语句
- Oracle获取建表、索引语句
- Oracle查看索引语句
- sqlser 查询语句有效利用索引的条件
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理和自定义异常
- Oracle直方图导致SQL不走索引.