加载JSP页面太慢

时间:2014-01-25 11:08:14

标签: java jsp jstl

我在jsp jstl标签中的新手。我有一个问题,最近我建立了可以按收入代码计算出口总额的网络应用程序。我使用jstl标签在jsp中进行查询。问题是我的页面加载时间过长。我有大约60个出口,26个收入代码。 1个出口可以有至少4个收入代码。

这是我的代码

在dashboard.jsp中

 <sql:query var="outletView" dataSource="${datasource}">
                                    SELECT 
                                        outletid
                                    FROM 
                                        user_payment
                                   group by 
                                        outletid
                    </sql:query>
                                        <table class="table table-bordered table-striped table-hover">
                                            <thead>
                                                <th> Outlet ID </th>
                                                <th> Revenue Code </th>
                                                <th> Total Transaction </th>
                                                <th> Total Amount </th>
                                            </thead>

                                        <c:forEach items="${outletView.rows}" var="rowOutlet">
                                            <sql:query var="outletView" dataSource="${datasource}">
                                                SELECT 
                                                    revcode,
                                                    count(receiptnumbe) as Transactions,
                                                    sum(amount) as total
                                                FROM 
                                                    user_payment
                                                Where 
                                                    outletid='${rowOutlet.outletid}'
                                                Group by 
                                                    revcode

                                            </sql:query>




                                                    <c:forEach items="${outletView.rows}" var="displayrevcode">
                                                        <tr>
                                                            <td>${rowOutlet.outletid}</td>
                                                            <td>${displayrevcode.revcode}</td>
                                                            <td>${displayrevcode.Transactions}</td>
                                                            <td>${displayrevcode.total}</td>
                                                        </tr>

                                                    </c:forEach>


                                        </c:forEach>

可以让它更快吗?我必须获取并计算每个商店的收入代码金额......

2 个答案:

答案 0 :(得分:0)

多个问题:

  1. 从JSP运行查询(直接/间接使用标记)是一种不好的做法。仅从服务层查询。
  2. 循环查看一个查询结果并根据外部循环运行另一个查询是一种非常糟糕的做法。它通常会导致在具有大型数据集的生产环境中运行速度非常慢。使用联接来避免此类查询。
  3. 这是一项报告功能。报告很少有。通常,报告会在前一天的数据中运行。尽可能预处理报告数据。在数据仓库术语中,为数据创建多维数据集。这些查询脱机运行,并使报表数据可供用户访问报表时使用。

答案 1 :(得分:0)

创建单个select语句而不是n + 1(其中n是不同outletid的数量):

SELECT 
    outletid, 
    revcode,
    count(receiptnumbe) as Transactions,
    sum(amount) as total
FROM 
    user_payment
GROUP BY 
    outletid, revcode
ORDER BY 1