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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

IOT(Index Organized Table)

發布時間:2023/11/29 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOT(Index Organized Table) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 我們知道一般的表都以堆(heap)的形式來組織的,這是無序的組織方式。Oracle還提供了一種有序的表,它就是索引組織表,簡稱IOT表。IOT表上必須要有主鍵,而IOT表本身不對應segment,表里所有的數據都存放在主鍵所在的索引的葉子節點里。換句話說,在索引葉子節點里的索引條目里不僅存放了被索引的列的值,還同時存放了其他列的值。
??? 對于總是通過主鍵訪問數據的表來說,比較適合使用IOT表。如果使用普通表,則通過主鍵索引訪問表時,至少要讀取兩個數據塊:一個索引塊,另一個是表的數據塊。而如果通過IOT表,由于表的數據就存放在索引塊中,所以只需要讀取一個塊即可。IOT表時虛擬表,但是他具有普通表所有的特性。而且盡管IOT表的數據實際存放在索引segment里,但是我們還是可以在IOT表的基礎上,在其他列上再次創建索引,這種索引我們叫二級索引。


使用二級索引查找數據時,存在以下兩個階段:
1,物理猜測:根據二級索引里記錄的物理ROWID,去掃描其指向的IOT表所依附的索引segment里的索引節點。
2,邏輯猜測:由于IOT表的數據存放在索引的葉子節點里,而由于在索引里數據都是有序存放的,數據會子會在葉子節點中間插入,因此就存在向葉子節點的拆分問題。一旦葉子節點被拆分,數據所在的索引塊就會變化,那么二級索引所指向的位置也就錯誤了。通過物理ROWID去訪問IOT表就找不到數據。這個時候,Oracle會進行邏輯猜測,這時就不使用ROWID了,而是使用主鍵列的值去掃描IOT表。

?

創建IOT表的例子如下:
create table iot_test(id number,c1 varchar2(40),c2 varchar2(40),c3 varchar2(40),c4 varchar2(40),primary key(id))
organization index
tablespace indx
pctthreshold 10
including c2
overflow tablespace users;

?

我們定義的IOT表時,必須創建一個主鍵約束,然后指定organization index選項,可以同時指定主鍵對應的索引所在的表空間名稱。從上面的例子中,假設經常訪問的列id和c1這兩個列,則如果把其他的c2,c3,c4列也放在索引塊里,會比較浪費空間。因為這三列并不經常被訪問,沒有必要把他們與id,c1放在一起。于是我么就可以通過設置pctthreshold和including這兩個屬性,從而只在索引塊里存放id和c1,而且他的三列在放入overflow里,(overflow是一種segment).

?

pctthreshold說明留在索引塊里的數據空間占總數據塊大小的百分比,從0到50%。假設在IOT_TEST表中,id列和c1列總共大概需要400個字節,索引塊大小為8kB,我們希望ID列和C1列留在索引塊里。則留在索引塊里的數據占整個索引塊大小的5%(500/8192),于是可以將pctthreshold設置為5.我們還可以使用including,對于上面的例子來說,including c2表示從C2列開始,后面所有的列(也就是C2,C3,C4這三列)都放到overflow里。優先考慮pctthreshold,也就是說如果id列的值占數據塊大小的百分比已經超過了指定的pctthreshold,則盡管指定的是從C2列開始后面的所有列都放入OVERFLOW,但是由于違反了pctthreshold,則C1以后的列也都全部放入overflow里(即c1,c2,c3,c4都放入overflow里)
?

?

總結

以上是生活随笔為你收集整理的IOT(Index Organized Table)的全部內容,希望文章能夠幫你解決所遇到的問題。

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