9

select * from test where rowid>='xxxxx'

這個sql多快讀


TABLE ACCESS BY INDEX ROWID   纔是回表


oralce 怎麼實現並行, 通過rowid,extent 來實現的


select /*+ parallel(6) */ * from test;  開6個並行,一共7個進程,6個進程 掃描 1個進程 彙總  怎麼保證不去掃描重複數據呢,讓6個進程各自掃描獨立的extent。


 同一張表上只能一個並行?  no  應該是cpu_count * 2


分區表 數據 最好 均衡分佈, 怎麼建分區表,怎麼做到分佈均衡?


主題: 索引
            最常用的索引      btree ,bitmap  
     
    btree     
    b:balance 平衡    tree:樹形。

      
    
      root裏面 存儲了 分支範圍,+ 分支塊的 地址 
      分支 記錄的 是 葉子的 範圍 + 葉子 物理地址
      葉子塊,key+原表的ROWID + 2個 dba 指針        dba = data block address 

  1. 之所以Oracle在 Branch block中只記錄 索引鍵值的前綴,而不是所有值,是因爲這樣可以節約空間,從而能夠存儲更多的 索引條目  
  2. 同時,我們也能理解了爲什麼 查詢使用 like '%xxx' 這種方法不會走Btree 索引,因爲Branch block 存儲的是前綴.  

    
    表列少,很有可能索引比表大

   INDEX UNIQUE SCAN 索引唯一掃描。單塊讀 只可能發生在unique index/primary key 等值查找
                     等待事件:db file sequential read 但是你幾乎看不到,因爲只讀一條數據
                     HINT 無需指定,有索引會自動走INDEX UNIQUE SCAN 

 
INDEX UNIQUE SCAN  需要多少個io?  索引高度,如果有回表+1,有行遷移+2


發佈了24 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章