日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【性能优化】直方图

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【性能优化】直方图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL>
SQL> begin
? 2???????? for i in 1..10000 loop
? 3?????????? insert into hist values (i, i);
? 4???????? end loop;
? 5???????? commit;
? 6?????? end;
? 7?????? /

PL/SQL 過程已成功完成。
SQL> update hist set b=5 where b between 6 and 9995;
已更新9990行。
SQL> commit;
提交完成。
SQL> create index i_hist_b on tab(b);
索引已創建。
然后分析表,強制使列B不產生直方圖。
BEGIN
? DBMS_STATS.GATHER_TABLE_STATS(OWNNAME??? => USER,
??????????????????????????????? TABNAME??? => 'HIST',
??????????????????????????????? CASCADE??? => TRUE,
??????????????????????????????? METHOD_OPT => 'FOR? COLUMNS B SIZE 1 ');
END;
查看視圖USER_TAB_HISTOGRAMS,列B上只有最大值,最小值兩條記錄分別對應端點號(endpoint_number)0和1,這種顯示說明列B沒有直方

圖信息。
SQL>SELECT table_name,column_name,endpoint_number,endpoint_value FROM USER_TAB_HISTOGRAMS WHERE TABLE_NAME='TAB' ;

TABLE_NAME???????????????????? COLUMN_NAME????????????????????????????? ENDPOINT_NUMBER ENDPOINT_VALUE
------------------------------ ---------------------------------------- --------------- --------------
HIST??????????????????????????? B????????????????????????????????????????????????????? 0????????????? 1
HIST??????????????????????????? B????????????????????????????????????????????????????? 1????????? 10000

在沒有直方圖的情況下,在B列上進行等值查詢的時候,都是索引范圍掃描。
-----------------------------------------------------------------
SQL> select * from hist where b =1;
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1911084455
----------------------------------------------------------------------------------------
| Id? | Operation?????????????????? | Name???? | Rows? | Bytes | Cost (%CPU)| Time???? |
----------------------------------------------------------------------------------------
|?? 0 | SELECT STATEMENT??????????? |????????? |? 1000 |? 6000 |???? 4?? (0)| 00:00:01 |
|?? 1 |? TABLE ACCESS BY INDEX ROWID| HIST???? |? 1000 |? 6000 |???? 4?? (0)| 00:00:01 |
|*? 2 |?? INDEX RANGE SCAN????????? | I_HIST_B |? 1000 |?????? |???? 2?? (0)| 00:00:01 |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
?? 2 - access("B"=1)
Statistics
----------------------------------------------------------
????????? 1? recursive calls
????????? 0? db block gets
????????? 4? consistent gets
????????? 0? physical reads
????????? 0? redo size
??????? 570? bytes sent via SQL*Net to client
??????? 492? bytes received via SQL*Net from client
????????? 2? SQL*Net roundtrips to/from client
????????? 0? sorts (memory)
????????? 0? sorts (disk)
????????? 1? rows processed

SQL> select * from hist where b =5;
9991 rows selected.
Elapsed: 00:00:00.07
Execution Plan
----------------------------------------------------------
Plan hash value: 1911084455
----------------------------------------------------------------------------------------
| Id? | Operation?????????????????? | Name???? | Rows? | Bytes | Cost (%CPU)| Time???? |
----------------------------------------------------------------------------------------
|?? 0 | SELECT STATEMENT??????????? |????????? |? 1000 |? 6000 |???? 4?? (0)| 00:00:01 |
|?? 1 |? TABLE ACCESS BY INDEX ROWID| HIST???? |? 1000 |? 6000 |???? 4?? (0)| 00:00:01 |
|*? 2 |?? INDEX RANGE SCAN????????? | I_HIST_B |? 1000 |?????? |???? 2?? (0)| 00:00:01 |
----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
?? 2 - access("B"=5)
Statistics
----------------------------------------------------------
????????? 1? recursive calls
????????? 0? db block gets
?????? 1369? consistent gets
????????? 0? physical reads
????????? 0? redo size
???? 212165? bytes sent via SQL*Net to client
?????? 7818? bytes received via SQL*Net from client
??????? 668? SQL*Net roundtrips to/from client
????????? 0? sorts (memory)
????????? 0? sorts (disk)
?????? 9991? rows processed

-----生成直方圖 再次收集統計信息時 務必清除之前的統計信息。否則執行計劃會利用原來的統計信息
SQL> BEGIN
? 2? DBMS_STATS.GATHER_TABLE_STATS(OWNNAME??? => user,
? 3? TABNAME??? => 'HIST',
? 4? CASCADE??? => TRUE,
? 5? METHOD_OPT => 'FOR ALL COLUMNS? SIZE AUTO ');
? 6? END;
? 7? /

PL/SQL procedure successfully completed.
Elapsed: 00:00:00.28

SQL> select * from hist where b=1;
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1911084455
----------------------------------------------------------------------------------------
| Id? | Operation?????????????????? | Name???? | Rows? | Bytes | Cost (%CPU)| Time???? |
----------------------------------------------------------------------------------------
|?? 0 | SELECT STATEMENT??????????? |????????? |???? 1 |???? 6 |???? 2?? (0)| 00:00:01 |
|?? 1 |? TABLE ACCESS BY INDEX ROWID| HIST???? |???? 1 |???? 6 |???? 2?? (0)| 00:00:01 |
|*? 2 |?? INDEX RANGE SCAN????????? | I_HIST_B |???? 1 |?????? |???? 1?? (0)| 00:00:01 |
----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
?? 2 - access("B"=1)
Statistics
----------------------------------------------------------
??????? 150? recursive calls
????????? 0? db block gets
???????? 24? consistent gets
????????? 0? physical reads
????????? 0? redo size
??????? 570? bytes sent via SQL*Net to client
??????? 492? bytes received via SQL*Net from client
????????? 2? SQL*Net roundtrips to/from client
????????? 4? sorts (memory)
????????? 0? sorts (disk)
????????? 1? rows processed

SQL> select * from hist where b =5;
9991 rows selected.
Elapsed: 00:00:00.06
Execution Plan
----------------------------------------------------------
Plan hash value: 1745918543
--------------------------------------------------------------------------
| Id? | Operation???????? | Name | Rows? | Bytes | Cost (%CPU)| Time???? |
--------------------------------------------------------------------------
|?? 0 | SELECT STATEMENT? |????? |? 9991 | 59946 |???? 6?? (0)| 00:00:01 |
|*? 1 |? TABLE ACCESS FULL| HIST |? 9991 | 59946 |???? 6?? (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
?? 1 - filter("B"=5)
Statistics
----------------------------------------------------------
????????? 1? recursive calls
????????? 0? db block gets
??????? 688? consistent gets
????????? 0? physical reads
????????? 0? redo size
???? 212165? bytes sent via SQL*Net to client
?????? 7818? bytes received via SQL*Net from client
??????? 668? SQL*Net roundtrips to/from client
????????? 0? sorts (memory)
????????? 0? sorts (disk)
?????? 9991? rows processed
-------------------------------------------
SQL> SELECT TABLE_NAME, COLUMN_NAME, ENDPOINT_NUMBER, ENDPOINT_VALUE FROM USER_TAB_HISTOGRAMS
? 2? WHERE TABLE_NAME = 'HIST';

TABLE_NAME? COLUMN_NAME? ENDPOINT_NUMBER ENDPOINT_VALUE
----------- ------------ --------------? -------------- ---
HIST???????? B??????????????? 1????????????? 1??????
HIST???????? B??????????????? 2????????????? 2
HIST???????? B??????????????? 3????????????? 3
HIST???????? B??????????????? 4????????????? 4
HIST???????? B?????????????? 9995????????????? 5
HIST???????? B?????????????? 9996?????????? 9996
HIST???????? B?????????????? 9997?????????? 9997
HIST???????? B?????????????? 9998?????????? 9998
HIST???????? B?????????????? 9999?????????? 9999
HIST???????? B?????????????? 10000????????? 10000
HIST???????? A??????????????? 0????????????? 1
HIST???????? A??????????????? 1????????????? 10000

12 rows selected.

Elapsed: 00:00:00.00

總結

以上是生活随笔為你收集整理的【性能优化】直方图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。