我在H2数据库上创建了一个查询,该数据库在7个表上使用左外连接
每个表上都有索引引用连接列
当我剪切并粘贴sql并在Squirrel中执行它时,执行时间非常快,可能是10毫秒。
但是当我使用预准备语句在我的Java代码中执行相同的查询时,它需要3分钟。
我注意到当我的Java程序正在执行时,h2正在创建一个增长到几乎gig的临时文件 显然,松鼠在10毫秒内没有发生这种情况。
我试图使Squirrel环境与我的Java代码运行完全一样:两者都使用相同的H2数据库,相同的数据库URL,相同的驱动程序,相同的凭据,相同的JVM。
表格大小从大约350K行到10K行。 select语句中的总列数约为40.
有人知道Squirrel如此快速地执行此查询吗?
谢谢!
jdbc:h2:C:/EclipseWorkspaces/workspace36/MyH2DB;FILE_LOCK=NO;
select
table1.primarykey1,
table1.primarykey2,
table2.a_column,
(8 more columns)
table3.a_column,
(8 more columns)
table4.a_column,
table4.a_column,
table5.a_column,
table5.a_column,
table6.a_column,
(13 more columns)
table7.a_column,
(13 more columns)
from table1
left outer join table2 on table1.primarykey1 = table2.primarykey1 and table1.primarykey2 = table2.primarykey2
left outer join table3 on table1.primarykey1 = table3.primarykey1 and table1.primarykey2 = table3.primarykey2
left outer join table4 on table1.primarykey1 = table4.primarykey1
left outer join table5 on table1.primarykey1 = table5.primarykey1
left outer join table6 on table1.primarykey1 = table6.primarykey1
left outer join table6 on table1.primarykey1 = table6.primarykey1
left outer join table7 on table1.primarykey1 = table7.primarykey1
left outer join table7 on table1.primarykey1 = table7.primarykey1
PreparedStatement ps = h2connection.prepareStatement(query.toString);
ResultSet rs = ps.executeQuery() //Takes over 180 seconds, but only 10 milliseconds in Squirrel