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

我在Java应用程序中使用以下查询创建了链接表tableName

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

table2相同的查询。

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

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

现在,我的Java应用程序使用以下查询在table2上创建索引(如果不存在):

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

当我单击按钮以重新运行查询时,它给了我这样的错误: org.h2.jdbc.JdbcSQLException: Feature not supported: "LINK"; SQL statement: 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?

===============>>#1 票数:0

由于明显的原因,您无法在H2中的链接表上创建索引。 但是您可以在MySQL中创建这样的索引,它将被使用。 但是,您需要连接很多行,但无论如何查询都将非常缓慢地工作。

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

如果两侧 JOIN链接表,您可以创建一个链接表的查询和使用它。

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

这样的查询将由MySQL执行,并且应该相对较快。

  ask by jumpy translate from so

本文未有回复,本站智能推荐: