WEB开发网
开发学院数据库Oracle 优化Oracle库表设计的若干方法 阅读

优化Oracle库表设计的若干方法

 2006-08-06 12:00:14 来源:WEB开发网   
核心提示: 4、建立满足需求的复合键索引设计人员希望通过T_ORDER表上的IDX_ORDER_COMPOSITE复合索引满足以下两种组合条件的查询:·CLIENT + ORDER_DATE + IS_SHIPPED·ORDER_DATE + IS_SHIPPED为方便阐述

4、建立满足需求的复合键索引

设计人员希望通过T_ORDER表上的IDX_ORDER_COMPOSITE复合索引满足以下两种组合条件的查询:

·CLIENT + ORDER_DATE + IS_SHIPPED

·ORDER_DATE + IS_SHIPPED

为方便阐述,我们特地将IDX_ORDER_COMPOSITE的创建SQL语句再次列出:

create index IDX_ORDER_COMPOSITE on T_ORDER ( CLIENT ASC, ORDER_DATE ASC, IS_SHIPPED ASC);

事实上,在CLIENT + ORDER_DATE + IS_SHIPPED 三列上所执行的复合条件查询会应用到这个索引,而在ORDER_DATE + IS_SHIPPED列上所执行的复合查询不会使用这个索引,因而将导致一个全表扫描的操作。

可以用许多工具来了解查询语句的执行计划,通过SET AUTOTRACE ON来查询以上两个复合查询的执行计划:

打开SQL/Plus,输入以下的语句:

SQL> set autotrace on
SQL> select * from t_order where CLIENT = '1' and ORDER_DATE='1' and IS_SHIPPED='1';

分析得到的执行计划为:

SELECT STATEMENT Optimizer=CHOOSETABLE ACCESS (BY INDEX ROWID) OF 'T_ORDER' INDEX (RANGE SCAN) OF 'IDX_ORDER_COMPOSITE' (NON-UNIQUE)

可见Oracle先利用IDX_ORDER_COMPOSITE得到满足条件的记录ROWID,再通过ROWID返回记录。

而下面查询语句:

SQL> select * from t_order where ORDER_DATE='1' and IS_SHIPPED='1'

的执行计划则为:

SELECT STATEMENT Optimizer=CHOOSE TABLE ACCESS (FULL) OF 'T_ORDER'

上一页  5 6 7 8 9 10 

Tags:优化 Oracle 设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接