|
输入 table_name 的值: a
输入 columns 的值: object_type --做object_type字段的直方图
PL/SQL 过程已成功完成。
SQL> explain plan for select count(*) from a where object_type='INDEX';
已解释。
SQL> @getplan
'general,outline,starts'
Enter value for plan type:general
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2223038180
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 7 | 25 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 7 | | |
|* 2 | TABLE ACCESS FULL| A | 946 | 6622 | 25 (0)| 00:00:01 | --这里返回的是真实的行数,做object_type字段的直方图后,执行计划非常准。
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("OBJECT_TYPE"='INDEX')
SQL>
SQL>
SQL>
SQL>
SQL> @getcolstat
输入 owner 的值: ggs
输入 table_name 的值: a
COLUMN_NAME NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM NUM_BUCKETS LAST_ANALYZED
---------------- ---------- ----------- ----------- --------- ----------- --------------
SECONDARY 10000 1 .01 NONE 1 28-7月 -14
GENERATED 10000 2 .02 NONE 1 28-7月 -14
TEMPORARY 10000 2 .02 NONE 1 28-7月 -14
STATUS 10000 1 .01 NONE 1 28-7月 -14
TIMESTAMP 10000 350 3.5 NONE 1 28-7月 -14
LAST_DDL_TIME 10000 385 3.85 NONE 1 28-7月 -14
CREATED 10000 303 3.03 NONE 1 28-7月 -14
OBJECT_TYPE 10000 34 .34 FREQUENCY 34 28-7月 -14 --刚好等于distinct值
DATA_OBJECT_ID 10000 1836 18.36 NONE 1 28-7月 -14
OBJECT_ID 10000 10000 100 NONE 1 28-7月 -14
SUBOBJECT_NAME 10000 27 .27 NONE 1 28-7月 -14
OBJECT_NAME 10000 7725 77.25 NONE 1 28-7月 -14
OWNER 10000 9 .09 NONE 1 28-7月 -14
已选择13行。
SQL> select count(distinct object_name) from a; --总共才10000行,可以看出object_name的选择性是比较高的
COUNT(DISTINCTOBJECT_NAME)
--------------------------
7725
已选择 1 行。
SQL> @anatab_col
输入 owner 的值: ggs
输入 table_name 的值: a
输入 columns 的值: object_name
PL/SQL 过程已成功完成。
SQL> @getcolstat
输入 owner 的值: ggs
输入 table_name 的值: a
COLUMN_NAME NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM NUM_BUCKETS LAST_ANALYZED
---------------- ---------- ----------- ----------- --------------- ----------- --------------
SECONDARY 10000 1 .01 NONE 1 28-7月 -14
GENERATED 10000 2 .02 NONE 1 28-7月 -14
TEMPORARY 10000 2 .02 NONE 1 28-7月 -14
STATUS 10000 1 .01 NONE 1 28-7月 -14
TIMESTAMP 10000 350 3.5 NONE 1 28-7月 -14
LAST_DDL_TIME 10000 385 3.85 NONE 1 28-7月 -14
CREATED 10000 303 3.03 NONE 1 28-7月 -14
OBJECT_TYPE 10000 34 .34 FREQUENCY 34 28-7月 -14
DATA_OBJECT_ID 10000 1836 18.36 NONE 1 28-7月 -14
OBJECT_ID 10000 10000 100 NONE 1 28-7月 -14
SUBOBJECT_NAME 10000 27 .27 NONE 1 28-7月 -14
OBJECT_NAME 10000 7725 77.25 HEIGHT BALANCED 75 28-7月 -14
OWNER 10000 9 .09 NONE 1 28-7月 -14
已选择13行。
SQL> select count(*) from a where object_name like '%A%';
COUNT(*)
----------
6404
已选择 1 行。
SQL> explain plan for select count(*) from a where object_name like '%A%';
已解释。
SQL> @getplan
'general,outline,starts'
Enter value for plan type:general
PLAN_TABLE_OUTPUT
---------------------------------------------- |