【问题标题】:How to avoid unnecessary fetching of data from database?如何避免从数据库中不必要地获取数据?
【发布时间】:2013-12-15 05:10:38
【问题描述】:

在执行以下 JDBC 代码时,我在 MySQL 管理员中观察到了一些不必要的数据库获取活动。

public void tableData() {
    List<TaxAccountReportTableBean> tdata = new ArrayList<TaxAccountReportTableBean>();
    Connection con = null;
    Statement st = null;
    ResultSet rs = null;
    Class.forName("com.mysql.jdbc.Driver");
    con = (Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/inventory" + "", "root", "root");
    st = (Statement)con.createStatement(); 

    try {
        String qry = "SELECT taxno, region, taxname ,  tax, cf, cftax  FROM  Tax";
        System.out.println("-------->"+qry);
        rs = st.executeQuery(qry);

        while (rs.next()) {
            trtb = new TaxAccountReportTableBean();
            trtb.setTaxno(rs.getString(1));
            trtb.setRegion(rs.getString(2));
            trtb.setTaxname(rs.getString(3));
            trtb.setTaxpercent(rs.getString(4));
            trtb.setCfreq(rs.getString(5));
            trtb.setCftax(rs.getString(6));
            tdata.add(trtb);
        }

        rs.close();
        st.close();
        con.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

当我执行查询时,我在 MySQL 管理员中观察到有 10 个查询正在访问数据库。由于这种不必要的获取,应用程序性能很差。这是如何引起的,我该如何解决?


更新:我已经调试了代码,发现不必要的查询获取是在连接创建过程中发生的,而不是在从查询中获取数据的过程中。如何避免这个问题?

【问题讨论】:

  • 那么你把这个方法放在哪里了?

标签: mysql database performance jdbc


【解决方案1】:

在mysql中你可以使用WHERE条件来过滤数据,并且可以使用limit子句来获取特定行的数据。

String qry = "SELECT taxno, region, taxname ,  tax, cf, cftax  FROM  Tax WHERE your_condition limit 10"

你的情况会是这样的:

name LIKE "%abc%" //or you can use any thing based on your db structure.

【讨论】:

  • 上述表(即Tax)只包含6条记录。我已经通过将记录限制为 2 来尝试您的建议。即使有 10 个查询正在访问数据库。
  • @Vasu 如果表中只有 6 条记录,那么不会有任何问题,可能在其他任何地方都需要时间。通过调试代码进行检查。
  • 我已经调试了代码,发现不必要的查询获取是在连接创建过程中发生的,而不是在从查询中获取数据的过程中。有什么建议可以避免这个问题。
  • @Vasu 是的,使用连接池。另一方面:它真的会导致性能问题吗?
  • @MarkRotteveel 是的,使用 jdbc 数据库访问机制,对数据库的每个数据请求都会创建一个新连接。由于创建创建过程需要更多时间,如果并行数量更多,应用程序可能会面临性能问题数据库获取活动。所以我已经实现了你的建议(连接池)它的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2019-03-09
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多