程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> OracleCBO評估like的數據量

OracleCBO評估like的數據量

編輯:Oracle教程

OracleCBO評估like的數據量


對Like,有兩種形式的寫法是按照數據總量的5%評估。

SQL> drop table test purge;

SQL> create table test as select * from dba_objects;
SQL> exec dbms_stats.gather_table_stats(user,'test');
SQL> select count(1) from test;
COUNT(1)
----------
79747

SQL> select count(1) from test where object_name like 'test%';
COUNT(1)
----------
0
SQL> select count(1) from test where object_name like '%test%';
COUNT(1)
----------
12
SQL> select count(1) from test where object_name like '%test';
COUNT(1)
----------
2

SQL> set autotrace trace exp

--79747*0.05=3987.35
SQL> select * from test where object_name like '%test%';
執行計劃
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3987 | 389K| 224 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| TEST | 3987 | 389K| 224 (1)| 00:00:04 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_NAME" LIKE '%test%' AND "OBJECT_NAME" IS NOT NULL)
--79747*0.05=3987.35
SQL> select * from test where object_name like '%test';
執行計劃
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3987 | 389K| 224 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| TEST | 3987 | 389K| 224 (1)| 00:00:04 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_NAME" LIKE '%test' AND "OBJECT_NAME" IS NOT NULL)



--如果是百分號寫在後面,不能按照5%的

SQL> select * from test where object_name like 'test%';
執行計劃
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 200 | 224 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| TEST | 2 | 200 | 224 (1)| 00:00:04 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_NAME" LIKE 'test%')
SQL> select * from test where object_name like 't%';
執行計劃
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1079 | 105K| 224 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| TEST | 1079 | 105K| 224 (1)| 00:00:04 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_NAME" LIKE 't%')

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved