繁体   English   中英

当表包含 900 万条记录时,H2 数据库无法使用

[英]H2 database unuseable when table contains 9 million records

我使用 H2 作为以AUTO_SERVER=TRUE的嵌入式数据库。

一开始我只有几条记录,即使没有定义索引,性能也不是问题。

当表有更多记录时,性能严重下降,通过添加索引解决了这个问题。

然后数据库表现得非常好,直到最近没有。 记录达到超过 800 万,现在我无法从数据库中获得任何正常的性能,并尝试更改 cache_size 等......但没有任何改进。 我看到有人使用 H2 处理数百万甚至数十亿条记录的帖子,所以我缺少一些基本的东西吗? 即使是诸如select count(*) from HISTORICALDATA2这样的基本查询也需要很长时间,以至于我最终取消了查询。

这是表定义:

CREATE TABLE "PUBLIC"."HISTORICALDATA2"
(
   REQUESTID integer,
   SYMBOL varchar(50) NOT NULL,
   EXCHANGE varchar(20),
   SECTYPE varchar(10),
   CURRENCYNAME varchar(5),
   ENDDATETIME varchar(20),
   DURATION varchar(20),
   BARSIZE varchar(20),
   WHATTOSHOW varchar(20),
   USERTH integer,
   FORMATDATE integer,
   CHARTOPTIONS varchar(50),
   DATETIMEDATA timestamp,
   OPEN_PRICE decimal(20,2),
   HIGH_PRICE decimal(20,2),
   LOW_PRICE decimal(20,2),
   CLOSE_PRICE decimal(20,2),
   VOLUME integer,
   COUNT_FIELD integer,
   WAP integer,
   HASGAPS boolean,
   TSTAMP timestamp DEFAULT CURRENT_TIMESTAMP()
);

和指数:

CREATE INDEX HD_MAIN ON "PUBLIC"."HISTORICALDATA2"
(
  SYMBOL,
  EXCHANGE,
  ENDDATETIME,
  WHATTOSHOW,
  DURATION,
  BARSIZE
);

H2 和生产

H2 通常不用作生产数据库。 请参阅是否有任何原因不应该在生产中使用 h2 数据库? 更多细节。 许多答案给出了不这样做的正当理由。


迁移到另一个数据库

您可以将记录从 h2 迁移到 Postgres、MySQL 或 Oracle。

请参阅: 如何将 H2Database 数据库文件转换为 MySQL 数据库 .sql 文件?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM