select返回記錄的順序

2021-06-16 00:58:20 字數 2211 閱讀 5232

select

返回記錄的

順序中興通訊重慶研究所游波吳育紅

select,

順序,優化,備份,掃瞄,索引

當我們執行了

select語句,

select返回的記錄的

順序對我們方式有較大影響,對記錄備份清除以及sql效能優化都有很大的關係。因此有必要明確

select

返回記錄的

順序。本文按資料庫分類討論oracle/sybase/sqlserver

返回記錄的

順序,從原理**三種資料庫各自的特點,並著重**了這些差異對資料查詢及記錄備份的影響。

縮略語:

iam:indexallocationmap

pfs:pagefreespace

1.簡介

當我們執行了

select語句,

select返回的記錄的

順序對我們程式設計方式有較大影響,對資料庫記錄備份清除以及sql效能優化都有很大的關係。因此有必要明確

select

返回記錄的

順序。select

返回記錄的

順序與資料庫型別有很大關係,因此以下按資料庫型別分別討論。本文主要討論了oracle/sybase/sqlserver

返回記錄的

順序,從原理**三種資料庫各自的特點,並著重**了這些差異對資料查詢及記錄備份的影響。

2.oracle

以下假設資料庫查詢優化方式均為基於rule的方式,oracle採用兩種訪問表中記錄的方式:

a.全表掃瞄(fulltablescan)

全表掃瞄就是

順序地訪問表中每條記錄.oracle採用一次讀入多個資料塊(databaseblock)的方式優化全表掃瞄。

b.通過rowid訪問表

你可以採用基於rowid的訪問方式情況,提高訪問表的效率,rowid包含了表中記錄的物理位置資訊。oracle採用索引(index)實現了資料和存放資料的物理位置(rowid)之間的聯絡。通常索引提供了快速訪問rowid的方法,因此那些基於索引列的查詢就可以得到效能上的提高。通常表現為按索引掃瞄。(indexscan)

2.1全表掃瞄

如果select語句不能使用索引,則按全表掃瞄方式讀取資料塊,對於返回的結果集,oracle按rowid的大小

順序來返回記錄。因此

select*frommytable與

select*frommytableorderbyrowid效果是一樣的

可以通過

selectrowidfromtable得到rowid偽列,資料型別為rowid型別。使用查詢語句返回的是rowid的擴充套件格式(extendedrowid)。擴充套件格式的rowid由18個字元組成。這18個字元可以按照oooooo.fff.bbbbbb.sss的格式分為4組。分別代表資料物件編號(dataobjectnumber),資料檔案編號(datafilenumber),資料塊編號(datablocknumber),記錄或記錄片斷的塊內行號。

必須說明的是,並不是後插入記錄的rowid就越大,有可能後插入的記錄rowid還要小。下面給出兩個論點加以證明:

1.後插入的記錄塊內行號可能大,也可能小

根據我們的試驗,假設現在表中有三條記錄假設檔案號相同,按塊號,行號排列如下:

1080

1081

1082

刪除中間一條記錄後,得到

1080

1082

再增加一條記錄,可能會得到

1080

1081 <---新增加的記錄

1082

也可能是

1080

1082

1083 <---新增加的記錄

兩種情況均有可能出現,取決於oracle塊內的分配演算法。關於該情況的更深入的分析可以參見文獻2。

2.後插入的記錄的塊號有可能大,有可能小

插入記錄的塊號並不是線性增加的,而是受freelist控制。有關freelist的理論和演算法可以參見文獻1。

因此對於全表掃瞄可以得出以下結論:

1.        在oracle中

select*frommytable不能保證返回的記錄

順序是按插入的先後

順序,而是按rowid

順序。rowid的

順序與記錄行儲存的「物理序」一致。在沒有索引情況下,

select作全表掃瞄,是按「物理序」,此時

select

返回記錄按「物理序」最快。1

select返回的記錄順序

select返回記錄的順序對我們程式設計方式有較大影響,因此有必要明確select返回記錄的順序。select返回記錄的順序與資料庫型別有很大關係,與索引情況也有很大關係,以下分類討論。1.在oracle中 1 如果select 後面的where條件中不含索引,oracle按rowid的大小順序來返...

select查詢語句執行順序

分類 oracle體系結構 好文要頂 關注我收藏該文 張冲andy 關注 34 粉絲 44 加關注0 0 oracle表空間維護總結 move降低高水位 hwm 收藏 重新整理頁面 返回頂部 登入 或 註冊,訪問 首頁。推薦 超50萬vc 原始碼 大型組態工控 電力 cad與gis原始碼庫!緬懷 傳...

select的使用方法記錄

服務端 select.cpp 定義控制台應用程式的入口點。include stdafx.h include include include pragma comment lib,ws2 32.lib define int server port 6002 define str server ip 1...