国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

對參數 optimizer_index_cost_adj 的一點理解_041009

2024-07-21 02:11:17
字體:
來源:轉載
供稿:網友

參數optimizer_index_cost_adj設定了通過索引掃描和全表掃描之間的代價消耗關系,其默認值為100,表示oracle在計算查詢成本時,通過索引查找和全表掃描成本相等。該參數值越小,表明通過索引查找的代價越小,反之則越大。

    通過以下試驗,演示該參數的用法。

1) 查看參數optimizer_index_cost_adj的當前值


sql> conn / as sysdba

 

 

 

 

connected.

 

 

 

 

 

sql> show parameter optimizer_index_cost_adj

 

 

 

 

 

 

 

 

 

name                                 type        value

------------------------------------ ----------- ---------

optimizer_index_cost_adj             integer     100

--參數當前的默認值為100

 

sql>

 

 

 

 

 

 

sql> select isses_modifiable,issys_modifiable

 

  2  from v$parameter

 

 

 

 

  3  where name='optimizer_index_cost_adj';

 

 

 

 

 

 

 

 

 

isses issys_mod

 

 

 

 

 

----- ---------

 

 

 

 

 

true  false

--說明該參數可以在session級別動態改變,

  但不能在system級別動態改變

 

 

 

 

 

2) 創建表及索引,并對表進行分析

sql> conn scott/tiger

 

 

 

connected.

 

 

 

 

sql> create table test(a number,b char(10));

 

 

 

 

 

 

 

table created.

 

 

 

 

 

 

 

 

 

 

sql>

 

 

 

 

 

sql> begin

 

 

 

 

  2    for i in 1..10000 loop

 

 

  3      insert into test values(i,to_char(i));

  4    end loop;

 

 

 

 

  5    commit;

 

 

 

 

  6  end;

 

 

 

 

  7  /

 

 

 

 

 

 

 

 

 

 

 

pl/sql procedure successfully completed.

 

 

 

 

 

 

 

sql>

 

 

 

 

 

sql> create index idx_test_a on test(a);

 

 

 

 

 

 

 

index created.

 

 

 

 

 

 

 

 

 

 

sql>

 

 

 

 

 

sql> analyze table test compute statistics

 

  2  for table

 

 

 

 

  3  for all indexes

 

 

 

  4  for all indexed columns;

 

 

 

 

 

 

 

 

table analyzed.

 

 

 

 

 

 

 

 

 

 

sql>

 

 

 

 

 


3)將參數optimizer_index_cost_adj設為100,查看相應的執行計劃

sql> set autotrace traceonly explain

 

 

 

sql> alter session set optimizer_index_cost_adj=100;

 

 

session altered.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sql> select * from test where a=1;

 

 

 

 

execution plan

 

 

 

 

 

 

----------------------------------------------------------

 

   0      select statement optimizer=choose (cost=2 card=1 bytes=15)

   1    0   table access (by index rowid) of 'test' (cost=2 card=1 byt

          es=15)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   2    1     index (range scan) of 'idx_test_a' (non-unique) (cost=1

          card=1)

 

 

 

 

 

 

    
在以上部分中,oracle采用了正確的查找方法,使用索引來查找數據。
    下面演示如何讓oracle采用全表掃描的方式來查找數據,雖然我們明知這種方式效率不高。

4) 改變參數optimizer_index_cost_adj為1000,改變oracle的決策過程

sql> alter session set optimizer_index_cost_adj=1000;

 

 

 

 

 

 

 

 

 

 

session altered.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sql> select * from test where a=1;

 

 

 

 

 

 

 

 

 

 

 

 

execution plan

 

 

 

 

 

 

----------------------------------------------------------

 

   0      select statement optimizer=choose (cost=4 card=1 bytes=15)

   1    0   table access (full) of 'test' (cost=4 card=1 bytes=15)

    在以上演示中,通過改變optimizer_index_cost_adj參數,oracle采用全表掃描來執行同樣的查詢。

5)總結
     在oltp系統中,可以考慮將optimizer_index_cost_adj參數值設小,使系統傾向于使用索引;在dss系統中,則可以考慮適當將該參數調大,影響oracle的決策過程。

  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 诸城市| 太仆寺旗| 图们市| 华蓥市| 钦州市| 西林县| 泰和县| 仲巴县| 台南市| 台南县| 锦州市| 北宁市| 闸北区| 车险| 定结县| 平塘县| 永昌县| 塔城市| 广州市| 道真| 高密市| 滨州市| 长垣县| 博乐市| 甘洛县| 宣化县| 望奎县| 永新县| 梨树县| 宁河县| 武乡县| 崇礼县| 来宾市| 太和县| 桃园市| 大港区| 隆尧县| 阳山县| 比如县| 沙坪坝区| 梁河县|