gpt4 book ai didi

clustered-index - H2数据库: clustered indexes support

转载 作者:行者123 更新时间:2023-12-01 08:40:52 31 4
gpt4 key购买 nike

我将 H2 数据库用于包含大量时间序列的环境数据。时间序列只是定期(例如每小时一次)记录在数据库中的传感器的测量值。

表中存储的数据:

CREATE TABLE hydr
(dt timestamp
,value double
,sensorid int)

我想对表进行范围查询,例如:

select * from hydr
where dt between '2010-01-01' and '2010-10-01'

为了提高性能,我想在 dt 列上构建聚集索引,但问题是,我还没有发现 H2 是否支持聚集索引。有人知道 H2 是否支持 聚集索引

最佳答案

简答:表的主键必须是 BIGINT 类型:

CREATE TABLE hydr(dt bigint primary key, value double, sensorid int);

在这种情况下,表格是使用“dt”列组织的。这称为“聚集索引”。不支持 TIMESTAMP 数据类型,主要是因为它还包含纳秒。您可以做的是将 unix 时间戳(自 1970 年以来的毫秒数)存储为 BIGINT。

长答案:关于数据如何在 H2 内部存储的文档很差。我将在 H2 数据库的“性能”文档中添加以下部分。我希望这能解决问题(如果没有,请告诉我):

如何在内部存储数据

对于持久性数据库,如果创建表时使用 BIGINT、INT、SMALLINT、TINYINT 类型的单列主键,则表的数据以这种方式组织。这有时也称为“聚集索引”或“索引组织表”。

H2 内部以 b 树的形式存储表数据和索引。每个 b 树将条目存储为唯一键(一或多列)和数据(零或多列)的列表。表数据始终以“数据 b 树”的形式组织,具有 long 类型的单个列键。如果创建表时指定了 BIGINT、INT、SMALLINT、TINYINT 类型的单列主键,则该列作为数据 b-tree 的键。如果没有指定主键,如果主键列是另一种数据类型,或者主键包含多于一列,则在表中添加一个 BIGINT 类型的隐藏自增列,用作数据 b 树的键。表的所​​有其他列都存储在这个数据b-tree的数据区域内(大的BLOB、CLOB列除外,它们存储在外部)。

每增加一个索引,就会创建一个新的“索引 b-tree”。这个 b-tree 的 key 由索引列和数据 b-tree 的 key 组成。如果主键是在插入数据后创建的,或者主键包含多列,或者主键不是上面列出的数据类型,则将主键存储在新的索引 b-tree 中。

关于clustered-index - H2数据库: clustered indexes support,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312857/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com