轉: 關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jsoncpp按寫入順序讀取JSON
- 棧是按照順序且連續儲存值
- 美團二面:SpringBoot讀取配置優先順序順序是什麼?Spring Boot
- JavaScript按照漢字拼音順序排序JavaScript排序
- SpringBoot配置檔案優先順序載入順序Spring Boot
- 關於 i=i++ 問題、入棧順序
- 關於RocketMQ的順序訊息MQ
- 關於 Promise 的執行順序Promise
- Java框架學習順序是哪些Java框架
- Java框架學習順序是哪些?Java框架
- DNS解析順序是怎樣的?DNS
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- linux 中實現資料按照指定行號順序輸出Linux
- # 關於select關鍵字語句定義順序# 關於select關鍵字語句執行順序
- 欄位按照指定 ID 順序進行排序排序
- thinkphp where in order 按照順序in的迴圈排序PHP排序
- 順序表有序插入資料
- python中按照資料夾中檔案的排列順序讀取檔案內容Python
- python運算子及優先順序順序Python
- PHP中foreach讀取順序PHP
- [轉] Oracle資料庫中建立表時怎樣考慮列順序Oracle資料庫
- Laravel restful 路由編寫順序LaravelREST路由
- 磁碟順序寫的介紹
- 順序表
- python-reverse順序反轉Python
- 關於JAVA中順序IO的基本操作Java
- 第2章 順序表及其順序儲存
- Mysql關於my.cnf引數檔案的讀取順序及各項配置的覆蓋優先順序MySql
- 能否在Oracle資料庫表中指定列順序OKOracle資料庫
- Java父子類載入順序Java
- 順序表應用5:有序順序表歸併
- 順序表應用6:有序順序表查詢
- 多個ajax axios請求,呼叫按照順序執行iOS
- 按照陣列順序給物件重新組合成新物件陣列物件
- laravel 按照whereIn中給定陣列順序輸出Laravel陣列
- 請教前輩:關於JS的一個奇怪的錯誤,不知是解析順序造成的,還是什麼原因。。JS
- UML順序圖
- 順序查詢
- 順序結構