H2内存数据库查询很慢

标签 h2 spring-jdbc

我正在使用 H2 数据库来提高性能,因此我决定在运行时将数据从 MySQL 加载到 H2 数据库。

场景是我创建了三个表:book、author、book_author。 book_author 是一个多对多表。

表book、author和book_author分别有1000、50000和50000条记录。

选择查询

select book.name 
from book, author , book_author 
where book.id = book_author.book_id 
and book_author.author_id = author.id 
and author.name = 'Charles Dickens'

执行需要 7 分钟。

我使用 spring-jdbc 创建 H2 内存数据库。

EmbeddedDatabase database_01 = new EmbeddedDatabaseBuilder().
    setType(EmbeddedDatabaseType.H2).
    addScript("initial_script.sql").
    setName("database_01").build();

JdbcTemplate jdbcTemplate_01 = new JdbcTemplate(database_01);

有人可以建议为什么要花费这么多时间以及优化它的方法吗?

最佳答案

您创建了正确的索引吗?另请参阅documentation about index and how they are used in H2 .

关于H2内存数据库查询很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13155098/

相关文章:

database - 我如何使用表单将数据插入到我的 H2 数据库中

Spring Data JPA 和 JDBC 模板

java - 是否可以使用实例化的 pojo 来插入 JDBC 模板?

java - JDBC模板是否缓存连接?

Spring-jdbc 5.0.5 命名参数JdbcTemplate.batchUpdate ORA-01000

java - 如何设置 Spring Boot 以在 @JdbcTest 类之后关闭连接池?

java - 导入txt文件时如何获取违反FK约束的行号?

mysql - JPA 一元运算符

primary-key - H2 相当于 Postgres `SERIAL` 或 `BIGSERIAL` 列?

tomcat - 我在哪里可以告诉 Tomcat 已部署应用程序的数据要存储在哪里?