2014-01-25 145 views
0

即時消息jsp jstl標籤中的新手。我有一個問題,最近我建立的網絡應用程序,可以通過收入代碼計算outlet的總金額。我使用jstl標籤在jsp中進行查詢。問題是我的頁面加載時間過長。我有大約60個插座,26個收入代碼。 1個插座可以有至少4個收入代碼。加載JSP頁面速度過慢

這裏是我的代碼

在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> 

能使其更快?我有獲取和計算每個出口的收入代碼量...

回答

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 
+0

Order BY 1是什麼意思? –

+0

它與'ORDER BY outletid'相同 - 如果它是數字,則表示select語句 –

+0

中的列順序,謝謝你的解釋。它的數組索引以1開頭。 –

0

的多個問題:

  1. (直接/間接使用標籤)是一種不好的做法,從JSP運行查詢。僅從服務層查詢。
  2. 循環查詢一個查詢結果並根據外部循環運行另一個查詢是非常糟糕的做法。它通常會導致生產環境中運行速度非常慢的大型數據集查詢。使用連接來避免此類查詢。
  3. 這是一個報告功能。報告很少生動。通常會在前一天的數據上運行報告。儘可能預處理報告數據。在數據倉庫術語中,爲數據創建多維數據集。這些查詢脫機運行,並保持報表數據在用戶訪問報表時可供使用。
+0

所以,我應該怎麼辦?將查詢移動到servlet>? –

+0

單獨的視圖,控制器和服務層。從服務層運行查詢。嘗試spring框架和spring MVC。 Spring具有很好的功能來分離圖層。 – RaviH