轉: 關於oracle 是按照寫入順序還是ROWID順序取資料
答案是: ROWID順序
以下是轉的測試內容:
[@more@]
建立一個1M的表空間:
SQL> SHOW PARAMETER BLOCK_SIZE
NAME TYPE VALUE
------------------------------------ ----------- -----------------------
db_block_size integer 8192
SQL> CREATE TABLESPACE TEST DATAFILE 'E:ORACLEORADATAYTK102TEST01.DBF' SIZE 1M;
表空間已建立。
下面建立一張表佔用資料檔案的大部分空間:
SQL> CREATE TABLE T_TEST (ID NUMBER, NAME VARCHAR2(30)) TABLESPACE TEST
2 STORAGE (INITIAL 896K);
表已建立。
去掉資料檔案的頭資訊,這個資料檔案只有不到128k的可用空間了,下面建立目標表,為了方便,目標表包含了三個CHAR(2000)的欄位,這樣每條記錄都會佔用1個BLOCK,加上表頭的三個BLOCK,這張表最大隻能插入5條記錄:
SQL> CREATE TABLE T_TEST1 (ID NUMBER, C1 CHAR(2000), C2 CHAR(2000), C3 CHAR(2000))
2 TABLESPACE TEST STORAGE (INITIAL 64K);
表已建立。
SQL> INSERT INTO T_TEST1 VALUES (1, 'A', 'A', 'A');
已建立 1 行。
SQL> INSERT INTO T_TEST1 VALUES (2, 'A', 'A', 'A');
已建立 1 行。
SQL> INSERT INTO T_TEST1 VALUES (3, 'A', 'A', 'A');
已建立 1 行。
SQL> INSERT INTO T_TEST1 VALUES (4, 'A', 'A', 'A');
已建立 1 行。
SQL> INSERT INTO T_TEST1 VALUES (5, 'A', 'A', 'A');
已建立 1 行。
SQL> INSERT INTO T_TEST1 VALUES (6, 'A', 'A', 'A');
INSERT INTO T_TEST1 VALUES (6, 'A', 'A', 'A')
*第 1 行出現錯誤:
ORA-01653: 表 YANGTK.T_TEST1 無法透過 8 (在表空間 TEST 中) 擴充套件
檢查現在的讀取順序:
SQL> SELECT ID, ROWID FROM T_TEST1;
ID ROWID
---------- ------------------
3 AAAPFGAAJAAAAB8AAA
4 AAAPFGAAJAAAAB9AAA
5 AAAPFGAAJAAAAB+AAA
1 AAAPFGAAJAAAAB/AAA
2 AAAPFGAAJAAAACAAAA
可以看到,當前的讀取順序確實不是按照插入順序進行的,而是根據ROWID的順序進行的讀取。
下面刪除剛才建立的T_TEST,插入一條新的記錄,再次檢查讀取順序:
SQL> DROP TABLE T_TEST PURGE;
表已刪除。
SQL> INSERT INTO T_TEST1 VALUES (6, 'A', 'A', 'A');
已建立 1 行。
SQL> SELECT ID, ROWID FROM T_TEST1;
ID ROWID
---------- ------------------
3 AAAPFGAAJAAAAB8AAA
4 AAAPFGAAJAAAAB9AAA
5 AAAPFGAAJAAAAB+AAA
1 AAAPFGAAJAAAAB/AAA
2 AAAPFGAAJAAAACAAAA
6 AAAPFGAAJAAAAAJAAA
已選擇6行。
由於資料檔案前面的BLOCK被釋放,T_TEST1表新擴充套件的EXTENT的BLOCK_ID要小於原EXTENT的BLOCK_ID,因此ID為6的記錄的ROWID明顯比前面5條記錄的ROWID要小,顯然Oracle並不是根據ROWID大小順序來讀取記錄的。不過同一個EXTENT中,Oracle是根據這個順序來讀取的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/197458/viewspace-1052643/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 棧是按照順序且連續儲存值
- 【Oracle】-【插入讀取順序】-插入讀取之間的順序關係Oracle
- jsoncpp按寫入順序讀取JSON
- 美團二面:SpringBoot讀取配置優先順序順序是什麼?Spring Boot
- JAVA中取順序號 (轉)Java
- JavaScript按照漢字拼音順序排序JavaScript排序
- Java框架學習順序是哪些Java框架
- Java框架學習順序是哪些?Java框架
- DNS解析順序是怎樣的?DNS
- 關於jvm載入類的實現順序JVM
- 關於 Promise 的執行順序Promise
- 關於RocketMQ的順序訊息MQ
- javascript載入順序JavaScript
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- 順序表有序插入資料
- SpringBoot配置檔案優先順序載入順序Spring Boot
- 欄位按照指定 ID 順序進行排序排序
- thinkphp where in order 按照順序in的迴圈排序PHP排序
- 關於defer執行順序問題
- 關於java的初始化順序Java
- java類載入順序Java
- [Web]HTML載入順序WebHTML
- linux 中實現資料按照指定行號順序輸出Linux
- 順序表
- nginx快取優先順序Nginx快取
- Laravel restful 路由編寫順序LaravelREST路由
- # 關於select關鍵字語句定義順序# 關於select關鍵字語句執行順序
- 按照順序動態載入js檔案簡單介紹JS
- Oracle資料庫對GCC的安裝順序Oracle資料庫GC
- 資料型別優先順序資料型別
- python運算子及優先順序順序Python
- 第2章 順序表及其順序儲存
- 關於JAVA中順序IO的基本操作Java
- python中按照資料夾中檔案的排列順序讀取檔案內容Python
- Oracle DG主備啟動關閉順序Oracle
- ORACLE RAC 的啟動和關閉順序Oracle
- Oracle對於物件名的解釋順序Oracle物件
- oracle pfile spfile啟動順序 優先順序 spfilesid 〉 spfile 〉 initsidOracle