Java 语句。executeQuery()占用的时间太多。有没有办法优化这一点?我正在使用雅典娜数据库
无论查询是什么,Statement.excecuteQuery占用的时间太多Java 语句。executeQuery()占用的时间太多。有没有办法优化这一点?我正在使用雅典娜数据库,java,sql,amazon-athena,Java,Sql,Amazon Athena,无论查询是什么,Statement.excecuteQuery占用的时间太多 athenaQuery = "SELECT DISTINCT date " + "FROM sid.lvmh_shareofshelf_new_cat_all_dod "+ "where scope='PCD' and date!='' and country='" + countryName+ &quo
athenaQuery = "SELECT DISTINCT date " +
"FROM sid.lvmh_shareofshelf_new_cat_all_dod "+
"where scope='PCD' and date!='' and country='" + countryName+ "' " +
"and rname='" + rname + "' and top_category_lvmh='" + top_category_lvmh +
"' ORDER BY date DESC";
stmt = conn.createStatement();
long startTime = System.nanoTime();
rs = stmt.executeQuery(athenaQuery);
long endTime = System.nanoTime();
System.out.println("Total time taken : "+ (endTime - startTime));
花费的时间是2776930359纳秒2.776930359纳秒我不知道你们项目的内部结构。我建议做一些对你有帮助的事情 创建prepare语句,而不是每次编译它。使用参数准备查询。这是您可以进行的语法级优化。 Where子句参数,然后可以创建它的索引。这是数据库级优化。
比试着看看性能提高 我检查了雅典娜DB驱动程序 它有com.amazonaws.athena.jdbc.AthenaConnection类,该类从JDBCAPI实现java.sql.Connection接口。它拥有JDBC承诺的所有重载的prepareStatement方法 我想你们已经知道使用预先准备好的声明的好处了 在Where子句中查询您的日期!= 它是字符数据类型吗 你可以试试 日期不为空
谢谢你的回答。但不幸的是,athena的JDBC驱动程序缺乏现成的语句支持。所以我只能用它应该有的正常陈述。。您使用的是哪个版本的AJDBC41-1.1.0.jar我得到了这个异常方法Connection.preparedStatement还没有实现您是否分析了它以了解时间的走向?您是在外部网络上运行还是在AWS内部运行?where子句值的动态性如何?你执行了多少次?如果您可以添加有关所需内容的更多信息,也许我可以提供更多帮助如果您打开AthenConnection类,它具有以下准备语句的代码公共PreparedStatement prepareStatementString sql抛出SQLException{this.checkOpen;抛出新的NotImplementedExceptionConnection,prepareStatement;}同意你的上述评论。您是否可以检查explain plan Not aware Athena是否为相应的查询提供了此功能?检查哪个条款的成本更高。您是否尝试过日期不为空