H2数据库:聚集索引支持

2024-02-13

我使用 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 树的键。如果没有指定主键,或者主键列是其他数据类型,或者主键包含多个列,则表中会添加一个 BIGINT 类型的隐藏自增列,用作数据 B 树的键。表的所​​有其他列都存储在该数据 B 树的数据区域内(大 BLOB、CLOB 列除外,它们存储在外部)。

对于每个附加索引,都会创建一个新的“索引 B 树”。该 B 树的键由索引列加上数据 B 树的键组成。如果在插入数据后创建主键,或者主键包含多个列,或者主键不是上面列出的数据类型,则主键将存储在新的索引 B 树中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H2数据库:聚集索引支持 的相关文章

  • 为什么我的实体不能与 SpringBoot 一起工作,尽管它可以在没有 SpringBoot 的情况下工作

    请注意 在调查时这个问题 https stackoverflow com questions 52799706 springboot not an entity noredirect 1 comment92527948 52799706我更
  • Spring Boot 2 - H2 数据库 - @SpringBootTest - org.h2.jdbc.JdbcSQLException 失败:表已存在

    无法使用 schema sql 创建表的脚本来测试 Spring Boot 和 H2 因此 我设置了以下属性 spring datasource driver class name org h2 Driver spring datasour
  • 如何检查 h2 数据库健康状况和损坏情况

    我在 JavaFX 8 桌面应用程序中以嵌入模式使用 h2 数据库 并且我为用户开发了一个选项来备份和恢复数据库文件 在旧版本的程序中 我使用了 SQLite 数据库 并且使用 pragmaintegrity check 命令检查数据库文件
  • H2 表列在双引号中不区分大小写

    我正在开发一个工具 它将数据导入到动态生成的模式中 因此 我几乎无法控制表或列名称的外观 我最近遇到了在表中创建两列名称相同但大小写不同的问题 这个问题可以通过这个最简单的 DDL 操作来演示 CREATE TABLE a c1 integ
  • 如何使用 H2、JPA 和 Hibernate 映射 JSON 列

    我在应用程序 MySQL 5 7 中使用 并且有 JSON 列 当我尝试运行集成测试时 它不起作用 因为 H2 数据库无法创建表 这是错误 2016 09 21 16 35 29 729 ERROR 10981 main org hiber
  • 删除主键(聚集索引)以提高插入性能

    我们一直在经历 SQL 超时 并已确定该瓶颈是审核表 我们系统中的所有表都包含插入 更新和删除触发器 这些触发器会导致新的审核记录 这意味着审计表是系统中最大且最繁忙的表 然而数据只进入 永远不会出来 在这个系统下 所以没有select需要
  • 将 NOT_NULL 约束添加到 SQL 列

    我正在尝试使用以下命令将 NOT NULL 约束添加到 SQL h2 数据库中的列 ALTER TABLE CHARACTERS ADD CONSTRAINT nn PID NOT NULL PLAYER ID 这遵循我发现的模式here
  • 如何在playframework 2.0中配置FS数据库?

    这有可能吗 在框架的第一个版本中似乎很容易完成 而不是使用 Default database configuration db default driver org h2 Driver db default url jdbc h2 mem
  • H2索引名称唯一性

    我对 h2 数据库中索引名称的唯一性有一个小问题 使用 mysql mariadb 可以同时为表 A 和表 B 定义名为 X 的索引 对于 h2 数据库这是不可能的 因为每个数据库的索引名称应该是唯一的 这对我来说是一个问题 因为我有一个基
  • H2数据库用户定义的java函数类未找到

    当我创建一个 ALIAS 来在 H2 数据库中注册 java 函数时 它给出了未找到类的错误 我正在 TCP 连接上运行 h2 数据库 sample public class TimeFrame public static void mai
  • 定期重置嵌入式 H2 数据库

    我正在演示服务器中设置应用程序的新版本 并且希望找到一种每天重置数据库的方法 我想我总是可以有一个 cron 作业执行删除和创建查询 但我正在寻找一种更干净的方法 我尝试使用带有删除创建方法的特殊持久性单元 但它不起作用 因为系统频繁地 按
  • 有 H2 数据库的实际经验吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • B 树、数据库、顺序插入与随机插入以及速度。随机就是胜利

    EDIT Remus 纠正了我的测试模式 您可以在下面看到他的答案的更正版本 我采纳了用 DECIMAL 29 0 替换 INT 的建议 结果是 十进制 2133GUID 1836 即使行稍大一些 随机插入仍然获胜 尽管有解释表明随机插入比
  • 在实体框架代码优先中,为什么主键总是存储为聚集索引?

    我正在更多地了解一般索引 特别是聚集索引 在 Markus Winand 的这篇文章中 http use the index luke com blog 2014 01 unreasonable defaults primary key c
  • org.dbunit.dataset.NoSuchTableException,但表存在

    H2 1 4 191 数据库单元 2 5 1 如何解决这个问题 3种情况的代码和结果 org dbunit dataset NoSuchTableException category org dbunit dataset NoSuchTab
  • 如何使用 H2 进行 JUnit 测试来防止日期更改?

    对于使用 H2 的 JUnit Test 我正在保存一个具有 LocalDate 属性和值的实体LocalDate parse 1900 01 01 测试失败 Expected is lt 1900 01 01 gt but was lt
  • 提高聚簇索引 GUID 主键的性能

    我有一个包含大量行 10K 的表 它的主键是 GUID 主键是聚集的 该表的查询性能相当低 请提供建议以提高效率 GUID 上的聚集索引不是一个好的设计 GUID 的本质在于它是随机的 而聚集索引则通过键对记录进行物理排序 这两件事是完全矛
  • 以编程方式嵌入 Java h2 数据库

    目前我们使用HSQLDB http www hsqldb org 作为嵌入式数据库 但随着数据量的增长 我们会寻找内存占用更少的数据库 德比 JavaDB http developers sun com javadb 目前不是一个选项 因为
  • 使用 H2 数据库在 JDBC 中将年份从负 -509 更改为正 510

    509 vs 510 我在使用 JDBC 时看到某种已更改或错误的数据 所以我观察使用H2数据库 http h2database com Java 8 更新 151 上的版本 1 4 196 这是一个完整的例子 请注意我们如何检索日期值三次
  • 执行h2数据库中的脚本文件

    首先我想说我是 h2 数据库的新手 我需要在 h2 数据库中执行 sql 脚本文件 我有一个脚本文件 test sql 我想在 h2 数据库中执行它 是否可以 您可以使用RUNSCRIPT SQL 语句 http h2database co

随机推荐

  • PyQt5 - 如何在鼠标点击位置画一个点?

    我试图在主窗口上画一个点 但该点未显示 我尝试过绑定mousePressEvent to paintEvent 但效果不佳 这是我的代码的当前版本 也不起作用 我也尝试提出一个观点drawPoint方法 它也不起作用 import sys
  • Django - 如何从模型中选择特定列?

    我嗅了一下 找不到这个 但我确信它就在这里的某个地方 对这个潜在的双重帖子表示歉意 如果我有这个代码 return Story objects filter user request user id order by create date
  • Python 在 cv2.destroyWindow() 之后冻结

    我在 Mac OS X Lion 上的 Python 2 7 下使用 openCV 每当我运行代码来简单地显示相机源 来自 iSight 时 Python 就会冻结 看起来相机实际上并没有得到清理 我使用了相同代码的多个不同版本 如下 来自
  • Android EditText,在 numberDecimal 输入类型的情况下显示逗号和点作为可能的分隔符

    我需要让用户在输入十进制数时在两个变体之间进行选择 使用逗号 作为分隔符 使用点 作为分隔符 默认情况下 如果我使用inputType numberDecimal in the EditTextxml配置 EditText仅显示数字和逗号
  • R - 更改 corrplot 轴标签的大小

    我正在使用以下内容corrplot require corrplot needs the corrplot package corrplot cor lpp axis1 lpp axis2 method c number bg grey10
  • 如何将我的函数放入类中。Beginner

    我下面有一个 Json 函数 需要构造一个具有两个函数的类 我的第二个函数如何 知道 data这是第一个函数的响应 def results json request request get json data json loads json
  • Oracle SQL 循环遍历日期范围

    我正在尝试编写一个执行以下操作的查询 从 Visit 表中获取 Start Date 和 End Date 对于日期范围内包含的每个日期 搜索遭遇表 查看特定提供者在该日期是否看过患者 生成一个表格 显示每个日期以及谁在该日期见过该患者 日
  • 为什么我的 JFrame 没有显示?

    我很确定我以前已经这样做过 但由于某种原因 当我运行它时 JFrame 不会显示 JLabel originalString new JLabel Original String str getMutator JLabel currentS
  • 如何在 flutter/dart 中从购物车中删除商品

    当您有单独的列表小部件时 如何从 flutter 中的列表中删除购物车项目 我有三个包含以下代码的文件 carts dart gt 我在其中显示所有列表项 cart list item gt 我在其中创建了一个小部件 api service
  • 如何模拟任何未直接调用的函数?

    TL DR 我如何修补或模拟 任何未被直接调用 使用的函数 设想 我有一个简单的单元测试片段 utils functions py def get user agents sends requests to a private networ
  • 为什么我应该使用“->”而不是“.”在对象的指针中? [复制]

    这个问题在这里已经有答案了 我同意这可能是一个非常初学者的问题 但我不知道为什么我不能使用 访问对象指针的成员 e g JMP sum obj new JMP 0 JMP a sum obj gt number a number sum o
  • 从句子级别的旋转文本中取消旋转 PHP 中的文本

    我需要在 php 页面中整齐地输出旋转文本 我已经有了 hi hello greetings 格式的预旋转文本 我有一个在其他地方找到的 php 代码 但它不会在句子级别输出旋转文本 其中有两个 这是需要修复的代码
  • 如何在magento中提交表单后获取发布数据变量

    如何获取后变量的数据 就像如果我使用 post 方法发布表单 那么我可以使用 REQUEST 或 POST 获取它 我怎样才能在 mgento 中做到这一点 您可以使用以下命令读取值 this gt getRequest gt getPar
  • 在 Django 应用程序内对弹性搜索进行单元测试

    我有一个使用弹性搜索的 Django 应用程序 我想要 100 的代码测试覆盖率 因此我需要测试对 elasticsearch 在本地 安装 的 API 调用 所以我的问题是 模拟整个elasticsearch 更好还是我应该运行elast
  • cin.getline() 正在跳过 C++ 中的输入[重复]

    这个问题在这里已经有答案了 如果我使用以下代码 getline 不会采用最后一个输入 对于 for 循环的最后一次迭代 它只是跳过它 int main int n map
  • d3 sunburst 不使用内联 json 绘制

    我一直在尝试绘制内联旭日形 但结果始终是一个空块 有人可以看一下并提示我为什么吗 非常感谢你的帮助 基本上这是示例代码 我只是尝试将 json 加载更改为内联 json 这样我就可以更轻松地解析数据 function draw chart
  • 删除后未找到结果

    我有以下删除语句 delete s p o
  • 通过 jQuery AJAX 将数据发布到 Python CGI 脚本

    我正在尝试设置一个简单的脚本 其中使用 jQuery ajax 函数将一些数据发送到 Python CGI 脚本 Python 脚本只会将发布到其中的数据设为大写 然后将该数据返回到 HTML 文件 其中 div 将使用内容进行更新 我有如
  • iPhone 开发 - 限制用户与应用程序的交互并显示进度指示器

    我有一个案例 我从服务器获取信息 我的应用程序有一个选项卡栏和导航按钮 我希望应用程序显示进度指示器并禁用所有其他控件 以便用户在从服务器提取数据时无法跳转 我怎样才能做到这一点 我想到的一种方法是显示带有进度窗口的透明视图 很像消息警报窗
  • H2数据库:聚集索引支持

    我使用 H2 数据库来存储包含大量时间序列的环境数据 时间序列只是定期 例如每小时一次 记录在数据库中的传感器的测量值 表中存储的数据 CREATE TABLE hydr dt timestamp value double sensorid