本节提供有关
NdbIndexScanOperation
该类的信息。
- 家长班
- 儿童班
没有任何
- 描述
-
该类
NdbIndexScanOperation
表示使用有序索引的扫描操作。此类继承自NdbScanOperation
和NdbOperation
。NdbIndexScanOperation
仅用于有序索引;要使用唯一哈希索引,请使用NdbIndexOperation
.有关使用 的更多信息
NdbIndexScanOperation
,请参阅 第 1.4.2.3.3 节“扫描操作”和 第 1.4.2.3.4 节“使用扫描更新或删除行”。 - 方法
-
下表列出了该类的公共方法以及每个方法的用途或用途:
表 2.44 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.46 IndexBound 结构成员名称、类型和说明
姓名 类型 描述 low_key
const char*
包含扫描下限(或 NULL
从头开始扫描)的行。low_key_count
Uint32
下限中的列数(用于部分前缀的边界)。 low_inclusive
bool
关系为真, <=
关系为假<
。high_key
const char*
包含扫描上限(或 NULL
扫描到末尾)的行。high_key_count
Uint32
上限中的列数(用于部分前缀的边界)。 high_inclusive
bool
关系为真, >=
关系为假>
。range_no
Uint32
识别此界限的值;可以使用该 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。一个或多个扫描标志;multiple
flags
像OR
与 一起使用时一样被组合在一起NdbScanOperation::readTuples()
。有关可能的值,请参阅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
: 这是一个指向 a 的指针PartitionSpec
,它提供了额外的信息,使扫描一组减少的分区成为可能。sizeOfPartInfo
:分区规范的长度。
keyRecord
并bound
以与此方法的 2 参数版本相同的方式定义和使用。 - 返回值
0
成功 返回,-1
失败返回。- “旧” API 用法(在引入 NdbRecord 之前)
-
每个索引键都可以有下限、上限或两者。将键设置为等于值定义上限和下限。边界可以按任何顺序定义。冲突的定义会导致错误。
必须在索引键的初始序列上设置边界,并且除可能的最后一个边界之外的所有边界都必须是非严格的。这意味着,例如,“ a >= 2 AND b > 3 ”是允许的,但“ a > 2 AND b >= 3 ”是不允许的。
扫描当前可能会返回不满足边界的元组。例如,a
<= 2 && b <= 3
不仅扫描索引直到(a=2, b=3)
,而且还返回 any(a=1, b=4)
。当基于相等设置边界时,最好使用 和
BoundEQ
而不是等价对 。当表分区键是索引键的前缀时尤其如此。BoundLE
BoundGE
NULL
被认为小于任何非NULL
值并等于另一个NULL
值。要与 进行比较NULL
,请使用setBound()
空指针 (0
)。索引也存储所有
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
(0
用于NULL
)。
- 返回值
0
成功 返回,-1
失败返回。