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

首頁 > 開發 > 綜合 > 正文

index full scan與index fast full scan

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

  Index Full Scan vs Index Fast Full Scan
  index full scan和index fast full scan是指同樣的東西嗎?答案是no。兩者雖然從字面上看起來差不多,但是實現的機制完全不同。我們一起來看看兩者的區別在哪里?
  
  首先來看一下IFS,FFS能用在哪里:在一句sql中,假如我們想搜索的列都包含在索引里面的話,那么index full scan 和 index fast full scan 都可以被采用代替full table scan。比如以下語句:
  
  SQL> CREATE TABLE TEST AS SELECT * FROM dba_objects WHERE 0=1;
  
  SQL> CREATE INDEX ind_test_id ON TEST(object_id);
  
  SQL> INSERT INTO TEST
  SELECT  *
  FROM dba_objects
  WHERE object_id IS NOT NULL AND object_id > 10000
  ORDER BY object_id DESC;
  
  17837 rows created.
  
  SQL> analyze table test compute statistics for table for all columns for all indexes;
  
  Table analyzed.
  SQL> set autotrace trace;
  
  SQL> select object_id from test;
  
  17837 rows selected.
  
  Execution Plan
  ----------------------------------------------------------
    0   SELECT STATEMENT Optimizer=CHOOSE (Cost=68 Card=17837 Bytes=71348)
    1  0  TABLE access (FULL) OF 'TEST' (Cost=68 Card=17837 Bytes=71348)
  
  這時候 Oracle會選擇全表掃描,因為 object_id 列默認是可以為null的,來修改成 not null:
  
  
  SQL>alter table test modify(object_id not null);
  
  SQL> select object_id from test;
  
  17837 rows selected.
  
  Execution Plan
  ----------------------------------------------------------
    0   SELECT STATEMENT Optimizer=CHOOSE (Cost=11 Card=17837 Bytes=71348)
    1  0  INDEX (FAST FULL SCAN) OF 'IND_TEST_ID' (NON-UNIQUE) (Cost=11 Card=17837 Bytes=71348)
  
  當然我們也可以使用index full scan:
  
  
  SQL> select/*+ index(test ind_TEST_ID)*/ object_id from test;
  
  17837 rows selected.
  
  Execution Plan
  ----------------------------------------------------------
    0   SELECT STATEMENT Optimizer=CHOOSE (Cost=41 Card=17837 Bytes=71348)
    1  0  INDEX (FULL SCAN) OF 'IND_TEST_ID' (NON-UNIQUE) (Cost=101 Card=17837 Bytes=71348)
  
  我們看到了兩者都可以在這種情況下使用,那么他們有什么區別呢?有個地方可以看出兩者的區別, 來看一下兩者的輸出結果,為了讓大家看清楚一點,我們只取10行。
  
  INDEX FAST FULL SCAN
  
  SQL> select object_id from test where rownum<11;
  
   OBJECT_ID
  ----------
     66266
     66267
     66268
     66269
     66270
     66271
     66272
     66273
     66274
     66275
  10 rows selected.
  
  
  INDEX FULL SCAN
  
  SQL> select/*+ index(test ind_TEST_ID)*/ object_id from test where rownum<11;
  
   OBJECT_ID
  ----------
     10616
     12177
     12178
     12179
     12301
     13495
     13536
     13539
     13923
     16503
  10 rows selected.
  
  可以看到兩者的結果完全不一樣,這是為什么呢?這是因為當進行index full scan的時候 oracle定位到索引的root block,然后到branch block(假如有的話),再定位到第一個leaf block, 然后根據leaf block的雙向鏈表順序讀取。
它所讀取的塊都是有順序的,也是經過排序的。
  
  而index fast full scan則不同,它是從段頭開始,讀取包含位圖塊,root block,所有的branch block, leaf block,讀取的順序完全有物理存儲位置決定,并采取多塊讀,沒次讀取db_file_multiblock_read_count個塊。
  
  這就是為什么兩者的結果區別如此之大的原因,我們再仔細跟蹤一下這兩條語句。首先來看一下索引的結構
  
  
  SQL> select object_id from dba_objects where object_name='IND_TEST_ID';
  
   OBJECT_ID
  ----------
     70591
  索引的object_id為70591,使用tree dump可以看到索引樹的結構 SQL> ALTER session SET EVENTS 'immediate trace name TREEDUMP level 70591';
  
  ----- begin tree dump
  branch: 0x6809b8d 109091725 (0: nrow: 100, level: 1)
    leaf: 0x6809b96 109091734 (-1: nrow: 294 rrow: 0)
    leaf: 0x6c07ec1 113278657 (0: nrow: 262 rrow: 0)
    leaf: 0x6c07ebd 113278653 (1: nrow: 518 rrow: 0)
    leaf: 0x6c07eb1 113278641 (2: nrow: 524 rrow: 0)
    leaf: 0x6c07ead 113278637 (3: nrow: 524 rrow: 0)
    leaf: 0x6c07ea9 113278633 (4: nrow: 524 rrow: 0)
    leaf: 0x6c07ea5 113278629 (5: nrow: 524 rrow: 0)
    leaf: 0x6c07ea1 113278625 (6: nrow: 524 rrow: 0)
    leaf: 0x6c07e9d 113278621 (7: nrow: 524 rrow: 0)
    leaf: 0x6c07e99 113278617 (8: nrow: 524 rrow: 0)
    leaf: 0x6c07e95 113278613 (9: nrow: 532 rrow: 0)
    leaf: 0x6c07e91 113278609 (10: nrow: 524 rrow: 0)
    leaf: 0x6c07e8d 113278605 (11: nrow: 524 rrow: 0)
    leaf: 0x6c07ec8 113278664 (12: nrow: 524 rrow: 0)
    leaf: 0x6c07ec4 113278660 (13: nrow: 524 rrow: 0)
    leaf: 0x6c07ec0 113278656 (14: nrow: 524 rrow: 0)
    leaf: 0x6c07ebc 113278652 (15: nrow: 524 rrow: 0)
    leaf: 0x6809bb2 109091762 (16: nrow: 524 rrow: 0)
    leaf: 0x6c07eb8 113278648 (17: nrow: 524 rrow: 0)
    leaf: 0x6c07eb4 113278644 (18: nrow: 524 rrow: 0)
    leaf: 0x6c07eb0 113278640 (19: nrow: 524 rrow: 0)
    leaf: 0x6c07eac 113278636 (20: nrow: 524 rrow: 0)
    leaf: 0x6809bae 109091758 (21: nrow: 524 rrow: 0)
    leaf: 0x6c07ea8 113278632 (22: nrow: 524 rrow: 0)
    leaf: 0x6c07ea4 113278628 (23: nrow: 524 rrow: 0)
    leaf: 0x6c07ea0 113278624 (24: nrow: 105 rrow: 105)
    leaf: 0x6c07e9c 113278620 (25: nrow: 129 rrow: 129)
    leaf: 0x6c07eb9 113278649 (26: nrow: 123 rrow: 123)
    leaf: 0x6809baa 109091754 (27: nrow: 246 rrow: 246)
    leaf: 0x6c07e98 113278616 (28: nrow: 246 rrow: 246)
    leaf: 0x6c07e94 113278612 (29: nrow: 246 rrow: 246)
    leaf: 0x6809ba6 109091750 (30: nrow: 246 rrow: 246)
    leaf: 0x6809bce 109091790 (31: nrow: 246 rrow: 246)
    leaf: 0x6809bca 109091786 (32: nrow: 246 rrow: 246)
    leaf: 0x6809c05 109091845 (33: nrow: 248 rrow: 248)
    leaf: 0x6809c01 109091841 (34: nrow: 246 rrow: 246)
    leaf: 0x6809bfd 109091837 (35: nrow: 246 rrow: 246)
    leaf: 0x6809bf9 109091833 (36: nrow: 246 rrow: 246)
    leaf: 0x6809bf5 109091829 (37: nrow: 246 rrow: 246)
    leaf: 0x6809bf1 109091825 (38: nrow: 246 rrow: 246)
    leaf: 0x6809bed 109091821 (39: nrow: 246 rrow: 246)
    leaf: 0x6809be9 109091817 (40: nrow: 246 rrow: 246)
    leaf: 0x6809be5 109091813 (41: nrow: 246 rrow: 246)
    leaf: 0x6809be1 109091809 (42: nrow: 246 rrow: 246)
    leaf: 0x6809bdd 109091805 (43: nrow: 246 rrow: 246)
    leaf: 0x6809bd9 109091801 (44: nrow: 246 rrow: 246)
    leaf: 0x6809bd5 109091797 (45: nrow: 246 rrow: 246)
    leaf: 0x6809bd1 109091793 (46: nrow: 248 rrow: 248)
    leaf: 0x6809bcd 109091789 (47: nrow: 246 rrow: 246)
    leaf: 0x6809bc9 109091785 (48: nrow: 246 rrow: 246)
    leaf: 0x6809c08 109091848 (49: nrow: 246 rrow: 246)
    leaf: 0x6809c04 109091844 (50: nrow: 246 rrow: 246)
    leaf: 0x6809c00 109091840 (51: nrow: 246 rrow: 246)
    leaf: 0x6809bfc 109091836 (52: nrow: 246 rrow: 246)
    leaf: 0x6809bf8 109091832 (53: nrow: 246 rrow: 246)
    leaf: 0x6809bf4 109091828 (54: nrow: 246 rrow: 246)
    leaf: 0x6809bf0 109091824 (55: nrow: 246 rrow: 246)
    leaf: 0x6809bec 109091820 (56: nrow: 246 rrow: 246)
    leaf: 0x6809be8 109091816 (57: nrow: 246 rrow: 246)
    leaf: 0x6809be4 109091812 (58: nrow: 246 rrow: 246)
    leaf: 0x6809be0 109091808 (59: nrow: 248 rrow: 248)
    leaf: 0x6809bdc 109091804 (60: nrow: 246 rrow: 246)
    leaf: 0x6809bd8 109091800 (61: nrow: 246 rrow: 246)
    leaf: 0x6809b right">(出處:清風軟件下載學院)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定州市| 都昌县| 高邮市| 台湾省| 洛川县| 伊春市| 调兵山市| 桃园市| 北海市| 固阳县| 东阿县| 天台县| 寿宁县| 苍梧县| 邹平县| 南昌市| 专栏| 南和县| 合作市| 内黄县| 合肥市| 定襄县| 巫山县| 平罗县| 泸西县| 外汇| 邵武市| 恩施市| 沙坪坝区| 会理县| 海林市| 泰兴市| 台东县| 无极县| 金昌市| 五指山市| 鄂伦春自治旗| 罗江县| 门头沟区| 乡城县| 西乡县|