gpt4 book ai didi

java - H2 - 在链接表上创建索引并在链接表上执行 JOIN

转载 作者:行者123 更新时间:2023-12-02 00:03:43 26 4
gpt4 key购买 nike

我有一个 MySQL 表 tableNametable2其上定义了索引。

我在 Java 应用程序中创建了一个链接表 tableName使用此查询:

CREATE LINKED TABLE IF NOT EXISTS tableName('', 'jdbc:mysql://hostName:port/dbName', 'user', 'pass', 'tableName');

table2 进行相同的查询.

然后我创建了tableSelect在 H2 数据库中查询:

CREATE TABLE tableSelect AS SELECT * FROM tableName WHERE Sex = 'F'

现在,如果 table2 上不存在索引,我的 Java 应用程序将创建一个索引使用此查询:

CREATE INDEX IF NOT EXISTS DES ON table2(DES);

当我单击按钮重新运行查询时,它给了我这样的错误: org.h2.jdbc.JdbcSQLException: Feature not supported: "LINK"; SQL statement:

此外,如果定义了索引,我会执行 JOIN在已经定义的索引上,但速度太慢。 JOIN查询涉及H2中的一张表和MySQL中的一张表,即链接表,如下所示:

CREATE TABLE tableNew AS SELECT l.*, CONTR AS Activity FROM t AS ableSelect JOIN table2 AS agg ON l.Contr_Type = agg.DES;

如何优化此 JOIN?

最佳答案

由于明显的原因,您无法在 H2 中的链接表上创建索引。但是你可以在MySQL中创建这样的索引并且它会被使用。但是,如果您需要连接查询的许多行,无论如何,速度都会非常慢。

您可以使用 CREATE TABLE newName AS SELECT … FROM linkedTable 从 H2 中的 MySQL 创建该表的额外临时副本,在该副本中创建所有必要的索引,并在您的 中使用它JOIN 而不是链接表。当然,此副本不会反射(reflect)在 MySQL 数据库中执行的更改。

如果JOIN两侧都是链接表,您可以使用查询创建链接表并使用它。

CREATE LINKED TABLE tableName('', 'jdbc:…', 'user', 'password', '(SELECT … FROM … JOIN … ON …)');

这样的查询将由MySQL执行,速度应该比较快。

关于java - H2 - 在链接表上创建索引并在链接表上执行 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58167872/

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