本節提供有關 NdbIndexScanOperation 類別的資訊。
- 父類別
- 子類別
無
- 描述
-
NdbIndexScanOperation類別代表使用排序索引的掃描作業。此類別繼承自NdbScanOperation與NdbOperation。NdbIndexScanOperation僅適用於排序索引;若要使用唯一雜湊索引,請使用NdbIndexOperation。如需有關使用
NdbIndexScanOperation的詳細資訊,請參閱 第 1.4.2.3.3 節,「掃描作業」,以及 第 1.4.2.3.4 節,「使用掃描來更新或刪除列」。 - 方法
-
下表列出此類別的公用方法,以及每個方法的用途或用法
表 2.45 NdbIndexScanOperation 類別方法與說明
名稱 描述 end_of_bound()標記界限的結束 get_range_no()取得目前列的範圍編號 getDescending()檢查目前的掃描是否已排序 getSorted()檢查目前的掃描是否已排序 readTuples()使用排序索引讀取元組 reset_bounds()重設界限,將作業放入傳送佇列 setBound()定義範圍掃描的索引鍵界限
- 類型
-
NdbIndexScanOperation類別定義一個公用類型BoundType。此類別也定義一個
IndexBound資料結構,供使用NdbRecord的作業使用。
- 描述
此方法用於標記界限的結束;當批次處理索引讀取時(也就是說,當使用多個範圍時),會使用此方法。
- 簽名
int end_of_bound ( Uint32 range_no )- 參數
發生界限的範圍編號。
- 傳回值
0表示成功;-1表示失敗。
- 描述
此方法用於檢查掃描是否為遞減。
- 簽名
bool getDescending ( void ) const- 參數
無.
- 傳回值
如果掃描依遞減順序排序,此方法會傳回
true;否則,會傳回false。
本節提供有關 IndexBound 資料結構的資訊。
- 父類別
- 描述
IndexBound是一個結構,用於描述NdbRecord掃描的索引掃描界限。- 成員
-
下表顯示成員名稱、類型與說明
表 2.47 IndexBound 結構成員名稱、類型與說明
名稱 類型 描述 low_keyconst char*包含掃描下限的列(或從開頭掃描的 NULL)。low_key_countUint32下限中的資料行數(用於依部分字首設定界限)。 low_inclusivebool關係為 <=時為 true,關係為<時為 false。high_keyconst char*包含掃描上限的列(或掃描至結尾的 NULL)。high_key_countUint32上限中的資料行數(用於依部分字首設定界限)。 high_inclusivebool關係為 >=時為 true,關係為>時為 false。range_noUint32用於識別此界限的值;可以使用 get_range_no()方法讀取(請參閱 NdbIndexScanOperation::get_range_no())。此值必須小於 8192(若未使用,則設定為零)。對於排序的掃描,每個範圍的range_no必須嚴格遞增,否則結果集不會正確排序。
如需詳細資訊,請參閱 第 2.3.22 節,「NdbRecord 介面」。
- 描述
此方法用於使用排序索引讀取元組。
- 簽名
virtual int readTuples ( LockMode mode = LM_Read, Uint32 flags = 0, Uint32 parallel = 0, Uint32 batch = 0 )- 參數
-
readTuples()方法採用此處列出的三個參數掃描使用的鎖定
mode。這是一個LockMode值;如需詳細資訊,包括允許的值,請參閱 NdbOperation::LockMode。一或多個掃描旗標;多個
flags會像使用NdbScanOperation::readTuples()時一樣進行OR運算。請參閱 NdbScanOperation::ScanFlag 以取得可能的值。要在
parallel中掃描的片段數;使用0來指定自動最大值。-
batch參數指定下一個NdbScanOperation::nextResult(true)方法呼叫將從伺服器傳回給用戶端的記錄數。使用0來指定自動最大值。注意在 MySQL 5.1.12 之前的版本,此參數會被忽略,並使用最大值。(錯誤 #20252)
- 傳回值
一個整數:
0表示成功;-1表示失敗。
- 描述
重設界限,並將操作放入下一次呼叫
NdbTransaction::execute()時傳送的清單中。- 簽名
int reset_bounds ( bool forceSend = false )- 參數
設定
forceSend為true,以強制立即傳送操作。- 傳回值
成功時傳回
0,失敗時傳回-1。
- 描述
-
此方法會定義範圍掃描中使用的索引鍵的界限,並為使用
NdbRecord定義的索引掃描設定界限。當與
NdbRecord一起使用時,此方法會被呼叫,以將範圍新增至已使用呼叫NdbTransaction::scanIndex()定義的索引掃描操作中。若要新增多個範圍,索引掃描操作必須已設定SF_MultiRange旗標。(請參閱 NdbScanOperation::ScanFlag。)如果使用多次呼叫
setBound()定義多個編號範圍,且掃描已排序,則每個範圍的範圍編號必須大於先前定義的範圍的範圍編號。 - 簽名
int setBound ( const NdbRecord* keyRecord, const IndexBound& bound )- 參數
-
當與
NdbRecord一起使用時,此方法會採用 2 個參數,在此列出keyRecord:這是一個對應於定義索引的索引鍵的NdbRecord結構。要新增的
bound(請參閱 NdbIndexScanOperation::IndexBound)。
- 傳回值
成功時傳回
0,失敗時傳回-1。
當應用程式知道僅會在特定分割區中找到範圍內的資料列時,可以使用此方法的額外版本。除了新增 PartitionSpec 之外,其餘與先前顯示的版本相同。這樣做會將掃描限制為單一分割區,進而提高系統效率。
- 簽章 (指定分割區時)
int setBound ( const NdbRecord* keyRecord, const IndexBound& bound, const Ndb::PartitionSpec* partInfo, Uint32 sizeOfPartInfo = 0 )- 參數 (指定分割區時)
-
此方法也可以使用以下四個參數進行叫用
keyRecord:這是一個對應於定義索引的索引鍵的NdbRecord結構。要新增至掃描的
bound(請參閱 NdbIndexScanOperation::IndexBound)。partInfo:這是PartitionSpec的指標,它會提供額外資訊,使其能夠掃描較小的分割區集。sizeOfPartInfo:分割區規格的長度。
keyRecord和bound的定義和使用方式與此方法的雙參數版本相同。 - 傳回值
成功時傳回
0,失敗時傳回-1。- “舊版” API 使用方式 (在導入 NdbRecord 之前)
-
每個索引鍵都可以有下限、上限或兩者。將索引鍵設定為某個值會定義上限和下限。可以依照任何順序定義界限。衝突的定義會產生錯誤。
必須在索引鍵的初始序列上設定界限,且除了可能最後一個界限之外,所有界限都必須是非嚴格的。例如,這表示 “a >= 2 AND b > 3” 是允許的,但 “a > 2 AND b >= 3” 則否。
掃描目前可能會傳回不滿足界限的元組。例如,
<= 2 && b <= 3不僅會掃描索引到(a=2, b=3),也會傳回任何(a=1, b=4)。在設定基於相等性的界限時,最好使用
BoundEQ,而不是等效的配對BoundLE和BoundGE。當資料表分割區索引鍵是索引鍵的前置字元時,尤其如此。NULL被視為小於任何非NULL值,且等於另一個NULL值。若要使用NULL執行比較,請使用空指標 (0) 呼叫setBound()。索引也會儲存全部為
NULL的索引鍵,且使用空的界限集執行索引掃描會傳回資料表中的所有元組。 - 簽章 (“舊版” API)
-
使用 “舊版” API 時,可以使用兩種方式呼叫此方法。這兩種方式都會使用界限類型和值;第一種方式也會使用界限的名稱,如下所示
int setBound ( const char* name, int type, const void* value )在 “舊版” API 下叫用此方法的第二種方式是使用界限的 ID 而非名稱,如下所示
int setBound ( Uint32 id, int type, const void* value ) - 參數 (“舊版” API)
-
此方法採用 3 個參數
要設定界限的屬性的
name或id。界限
type—請參閱 NdbIndexScanOperation::BoundType。界限
value的指標 (針對NULL使用0)。
- 傳回值
成功時傳回
0,失敗時傳回-1。