如何防止在 VoltDB 中使用默认主键索引?
How to prevent the default primary key indexing is from being used in VoltDB?
对于 VoltDB,在创建 table 时,我使用主键来防止内容违规。这会自动创建主键索引,它是一个平衡树。我还为 table 创建了哈希索引,我想使用哈希索引而不是使用主键索引。在执行查询时是否可以进行任何设置以使用哈希索引。
VoltDB 使用一种约定来确定是使用红黑树索引还是哈希索引。约定是在索引名称中包含子字符串 "hash"(不区分大小写)。它可以是前缀、后缀或名称中间的某处。
根据我的经验,由于索引完全在内存中,因此树索引和散列索引之间的性能差异很小。可能值得尝试这两种方式并比较性能与 space 用法来决定哪个是最好的。
此外,还有一些语法样式可用于声明 table 的主键。你不必给它一个名字,但你可以,这将允许你声明你想要它是树还是散列索引。应该没有必要仅仅因为主键索引不是你想要的而创建重复索引。下面是两个例子:
CREATE TABLE Version (
Major SMALLINT NOT NULL,
Minor SMALLINT NOT NULL,
baselevel INTEGER NOT NULL,
ReleaseDate TIMESTAMP,
CONSTRAINT Version_Hash_Idx PRIMARY KEY
(Major, Minor, Baselevel) -- hash index
);
CREATE TABLE Version (
Major SMALLINT NOT NULL,
Minor SMALLINT NOT NULL,
baselevel INTEGER NOT NULL,
ReleaseDate TIMESTAMP,
PRIMARY KEY (Major, Minor, Baselevel) -- default tree index
);
对于 VoltDB,在创建 table 时,我使用主键来防止内容违规。这会自动创建主键索引,它是一个平衡树。我还为 table 创建了哈希索引,我想使用哈希索引而不是使用主键索引。在执行查询时是否可以进行任何设置以使用哈希索引。
VoltDB 使用一种约定来确定是使用红黑树索引还是哈希索引。约定是在索引名称中包含子字符串 "hash"(不区分大小写)。它可以是前缀、后缀或名称中间的某处。
根据我的经验,由于索引完全在内存中,因此树索引和散列索引之间的性能差异很小。可能值得尝试这两种方式并比较性能与 space 用法来决定哪个是最好的。
此外,还有一些语法样式可用于声明 table 的主键。你不必给它一个名字,但你可以,这将允许你声明你想要它是树还是散列索引。应该没有必要仅仅因为主键索引不是你想要的而创建重复索引。下面是两个例子:
CREATE TABLE Version (
Major SMALLINT NOT NULL,
Minor SMALLINT NOT NULL,
baselevel INTEGER NOT NULL,
ReleaseDate TIMESTAMP,
CONSTRAINT Version_Hash_Idx PRIMARY KEY
(Major, Minor, Baselevel) -- hash index
);
CREATE TABLE Version (
Major SMALLINT NOT NULL,
Minor SMALLINT NOT NULL,
baselevel INTEGER NOT NULL,
ReleaseDate TIMESTAMP,
PRIMARY KEY (Major, Minor, Baselevel) -- default tree index
);