一個unusable 的索引REBUILD後分配的block是否改變
特殊條件下,一個unusable 的索引REBUILD後分配的block是否改變
Kevin Zou
2011-8-29
一個unusable 的索引,如果要啟用,必須要對其REBUILD。我們知道REBUILD一個索引時,分配給索引的BLOCK資訊會發生改變。
如果是對一個新建立的TABLE和INDEX,UNUSABLE後,沒有INSERT/UPDATE/DELETE的操作,REBUILD時BLOCK資訊會發生改變嗎?
搭建測試環境:
SQL> create table test as select * from all_objects where 0=1;
Table created.
SQL> insert into test select * from all_objects;
13540 rows created.
SQL> create index i_test on test(object_id);
Index created.
檢視新建立的索引I_TEST 佔用的BLOCK資訊:
SQL> select segment_name, file_id, blocks, block_id
2 from dba_extents
3 where segment_name='I_TEST' and wner='SYS';
SEGMENT_NAME FILE_ID BLOCKS BLOCK_ID
-------------------- ---------- ---------- ----------
I_TEST 1 8 37481
I_TEST 1 8 37489
I_TEST 1 8 37497
I_TEST 1 8 37505
通過SQL,檢視索引被引用。
|
使索引處於UNUSABLE狀態;
SQL> alter index i_test unusable;
Index altered.
因為索引I_TEST不能使用,同樣的SQL只能走FTS。
|
重新REBUILD 索引:
SQL> alter index i_test rebuild;
Index altered.
SQL> select segment_name, file_id, blocks, block_id
2 from dba_extents
3 where segment_name='I_TEST' and wner='SYS';
SEGMENT_NAME FILE_ID BLOCKS BLOCK_ID
-------------------- ---------- ---------- ----------
I_TEST 1 8 37641
I_TEST 1 8 37649
I_TEST 1 8 37657
I_TEST 1 8 37665
再次DUMP 索引的TREEDUMP:
branch: 0x40930a 4231946 (0: nrow: 29, level: 1)
leaf: 0x40930b 4231947 (-1: nrow: 485 rrow: 485)
leaf: 0x40930c 4231948 (0: nrow: 479 rrow: 479)
leaf: 0x40930d 4231949 (1: nrow: 478 rrow: 478)
leaf: 0x40930e 4231950 (2: nrow: 479 rrow: 479)
leaf: 0x40930f 4231951 (3: nrow: 479 rrow: 479)
leaf: 0x409310 4231952 (4: nrow: 479 rrow: 479)
leaf: 0x409311 4231953 (5: nrow: 479 rrow: 479)
leaf: 0x409312 4231954 (6: nrow: 478 rrow: 478)
leaf: 0x409313 4231955 (7: nrow: 479 rrow: 479)
leaf: 0x409314 4231956 (8: nrow: 479 rrow: 479)
leaf: 0x409315 4231957 (9: nrow: 479 rrow: 479)
leaf: 0x409316 4231958 (10: nrow: 479 rrow: 479)
leaf: 0x409317 4231959 (11: nrow: 479 rrow: 479)
leaf: 0x409318 4231960 (12: nrow: 479 rrow: 479)
leaf: 0x409319 4231961 (13: nrow: 479 rrow: 479)
leaf: 0x40931a 4231962 (14: nrow: 479 rrow: 479)
leaf: 0x40931b 4231963 (15: nrow: 479 rrow: 479)
leaf: 0x40931c 4231964 (16: nrow: 479 rrow: 479)
leaf: 0x40931d 4231965 (17: nrow: 471 rrow: 471)
leaf: 0x40931e 4231966 (18: nrow: 449 rrow: 449)
leaf: 0x40931f 4231967 (19: nrow: 449 rrow: 449)
leaf: 0x409320 4231968 (20: nrow: 449 rrow: 449)
leaf: 0x409321 4231969 (21: nrow: 449 rrow: 449)
leaf: 0x409322 4231970 (22: nrow: 449 rrow: 449)
leaf: 0x409323 4231971 (23: nrow: 448 rrow: 448)
leaf: 0x409324 4231972 (24: nrow: 448 rrow: 448)
leaf: 0x409325 4231973 (25: nrow: 449 rrow: 449)
leaf: 0x409326 4231974 (26: nrow: 449 rrow: 449)
leaf: 0x409327 4231975 (27: nrow: 404 rrow: 404)
看到BLOCK資訊傳送了變化,REBUILD前第一個BLOCK的位置是37481, 而REBUILD後改為37641。
結論:在資料沒有發生變化的條件,REBUILD一個UNUSABLE的索引,BLOCK還是會改變的。
-THE END-
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/40239/viewspace-706118/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MSSQL Rebuild(重建)索引SQLRebuild索引
- 一個改變世界的“箱子”
- Block學習②--block的變數捕獲BloC變數
- ORACLE 分割槽索引UNUSABLE導致的DML操作失敗引起的血案Oracle索引
- java 方法呼叫,形參改變,實參是否發生改變Java
- Block學習⑤--block對物件變數的捕獲BloC物件變數
- 一個徹底改變Redux的簡潔設計Redux
- 在一個元素上:hover,改變另一個元素的css屬性CSS
- flutter中的rebuild一些理解FlutterRebuild
- 歷經2個月從後端轉行到前端的改變後端前端
- position:absolute和float隱式改變display為inline-blockinlineBloC
- 求助掘金: 如何改變一個團隊的文化/氛圍
- 改變的代價:一個開發者對《最後生還者:第二部》的看法
- INDEX REBUILD和INDEX REORGANIZE和UPDATE STATISTICS是否涉及Sch-M的案例分析IndexRebuild
- 程式碼改變世界 | 如何封裝一個簡單的 Koa封裝
- 如何找到某個鍵值在索引中存在於哪個BLOCK中索引BloC
- Polygon:暴雪過去的6個月 顯示出一個正在迅速改變的公司Go
- oracle order by索引是否使用的情況Oracle索引
- 7 個改變我生活的 Git 小技巧Git
- 改變一個字元讓Go程式快42%字元Go
- 建立索引後,速度變快原因?以及索引失效總結索引
- unusable index對DML/QUERY的影響Index
- Block 形式的通知中心觀察者是否需要手動登出BloC
- 19、Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?IDE型別
- 如何確定一個 Go 變數會被分配在哪裡?Go變數
- 如何判斷sql中的索引是否生效SQL索引
- 【Mysql】一個簡易的索引方案MySql索引
- javascript中常用的陣列操作方法,以及是否會改變原始陣列JavaScript陣列
- (轉)MyEclipse安裝後一定要做的事-如改變預設編碼Eclipse
- 一個可以參考的JVM記憶體分配JVM記憶體
- oracle invisible index與unusable index的區別OracleIndex
- Devops 改變 coding —— 安裝個指定版本的 jenkins 發現和想象的不太一樣?devJenkins
- 一個查詢不走索引的例子索引
- Block學習①--block的本質BloC
- Linux:改變世界的一次程式碼提交Linux
- Rebuild TreeRebuild
- MySql ORDER BY索引是否失效MySql索引
- JavaScript監聽後代節點改變JavaScript
- 一個測試開發的十年心路歷程 - 從改變自己做起