1. 程式人生 > >關於ORACLE 1410:invalid ROIWD,然後藉著機會學習了一波ROWID。

關於ORACLE 1410:invalid ROIWD,然後藉著機會學習了一波ROWID。

最近做公司的一個專案出現了ORACLE 1410:invalid ROIWD,百度之後被告知可以試試刷洗索引,繼續深究為啥和索引有關係,然後就發現了新的東西:

ROWID是ORACLE中的一個重要的概念。用於定位資料庫中一條記錄的一個相對唯一地址值。通常情況下,該值在該行資料插入到資料庫表時即被確定且唯一。ROWID它是一個偽列,它並不實際存在於表中。它是ORACLE在讀取表中資料行時,根據每一行資料的實體地址資訊編碼而成的一個偽列。所以根據一行資料的ROWID能找到一行資料的實體地址資訊。從而快速地定位到資料行。資料庫的大多數操作都是通過ROWID來完成的,而且使用ROWID來進行單記錄定位速度是最快的。

第一部分6位表示:該行資料所在的資料物件的 data_object_id; 
第二部分3位表示:該行資料所在的相對資料檔案的id; 
第三部分6位表示:該資料行所在的資料塊的編號; 
第四部分3位表示:該行資料的行的編號;

索引就是儲存了rowid後三個部分的資訊。索引是物理存在的,而rowid是偽列。所以索引可以用來快速地定位到資料行。

ROWID是ORACLE中的一個重要的概念。用於定位資料庫中一條記錄的一個相對唯一地址值。通常情況下,該值在該行資料插入到資料庫表時即被確定且唯一。ROWID它是一個偽列,它並不實際存在於表中。它是ORACLE在讀取表中資料行時,根據每一行資料的實體地址資訊編碼而成的一個偽列。所以根據一行資料的ROWID能找到一行資料的實體地址資訊。從而快速地定位到資料行。資料庫的大多數操作都是通過ROWID來完成的,而且使用ROWID來進行單記錄定位速度是最快的。

第一部分6位表示:該行資料所在的資料物件的 data_object_id; 
第二部分3位表示:該行資料所在的相對資料檔案的id; 
第三部分6位表示:該資料行所在的資料塊的編號; 
第四部分3位表示:該行資料的行的編號;

索引就是儲存了rowid後三個部分的資訊。索引是物理存在的,而rowid是偽列。所以索引可以用來快速地定位到資料行。