使用dbms_stats.gather_table_stats调整表的统计信息
創(chuàng)建實(shí)驗(yàn)表,插入10萬行數(shù)據(jù)
SQL> create table test (id number,name varchar2(10));
Table created.
SQL> declare
begin
for i in 1..100000 loop
insert into test values(1,'a');
commit;
end loop;
end;
/?
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
查看表的統(tǒng)計(jì)信息,統(tǒng)計(jì)信息為空
SQL> select table_name ,num_rows,blocks,avg_row_len from user_tables where table_name='TEST';
TABLE_NAME NUM_ROWS BLOCKS AVG_ROW_LEN
------------------------------ ---------- ---------- -----------
TEST
收集表的統(tǒng)計(jì)信息
SQL> exec dbms_stats.gather_table_stats('SCOTT','TEST');
PL/SQL procedure successfully completed.
SQL> select table_name,num_rows,blocks,avg_row_len from user_tables where table_name='TEST';
TABLE_NAME NUM_ROWS BLOCKS AVG_ROW_LEN
------------------------------ ---------- ---------- -----------
TEST 100000 244 5
查看全表掃描的執(zhí)行計(jì)劃與cost
SQL> set lines 300 pages 300
SQL> explain plan for select * from test;
Explained.
SQL> select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 100K| 488K| 69 (2)| 00:00:01 |
| 1 | TABLE ACCESS FULL| TEST | 100K| 488K| 69 (2)| 00:00:01 |
--------------------------------------------------------------------------
8 rows selected.
計(jì)算將行數(shù)由10萬提高到200萬所使用的塊數(shù)
SQL> select round(244*2000000/100000) from dual;
ROUND(244*2000000/100000)
-------------------------
4880
通過使用set_table_stats修改統(tǒng)計(jì)信息
SQL> exec dbms_stats.set_table_stats(ownname=>'SCOTT',tabname=>'TEST',numrows=>2000000,numblks=>4880,avgrlen=>5);
PL/SQL procedure successfully completed.
SQL>select table_name,num_rows,blocks,avg_row_len from user_tables where table_name='TEST';
TABLE_NAME NUM_ROWS BLOCKS AVG_ROW_LEN
------------------------------ ---------- ---------- -----------
TEST 2000000 4880 5
查看全表掃描的執(zhí)行計(jì)劃與cost
SQL> explain plan for select * from test;
Explained.
SQL> select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2000K| 9765K| 1341 (2)| 00:00:17 |
| 1 | TABLE ACCESS FULL| TEST | 2000K| 9765K| 1341 (2)| 00:00:17 |
--------------------------------------------------------------------------
8 rows selected.
轉(zhuǎn)載于:https://www.cnblogs.com/SUN-PH/p/7655158.html
總結(jié)
以上是生活随笔為你收集整理的使用dbms_stats.gather_table_stats调整表的统计信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows/linux服务器上jav
- 下一篇: mysql常见的错误码