加载多个计数查询的最快方法

时间:2019-06-10 04:15:07

标签: java sql sql-server jdbc query-performance

enter image description here我在自己的swing应用程序中开发了MIS报告。指一张桌子 其中第一列包含日期列,其后是发票状态的7列,例如待付款,已付款,待付款,邮寄等。

我只是试图显示EXCEL PIVOT LIKE表报告,所以我已经成功实现了。

但问题是:行数每天都在增加,我已经开发了类似的查询

select count(invoice_No) 
from MyTable 
where ClaimStatus='columnHeader' 
AND date='row1stColumn'

,它将遍历所有行和列以获得所需的计数,并将其显示在jtable中。

但是正如我所说的那样,行数每天都在增加,SQL Server表数据也在大量增加。

所以我的计数查询有很多时间来填充该表

有什么方法可以使上述查询更快?

如果有人想查看我的代码,我会提供。

我已经实现了我的应用程序,但是由于海量数据,显示MIS报告需要花费时间

请查看我所附的图片,这是我的代码的输出。

代码是

1)在第一列中显示不同的日期

q="Select distinct(Inward_Date_Short) from Inward_Master";
PreparedStatement ps=con.prepareStatement(q);
                ResultSet rs=ps.executeQuery();
                while(rs.next())
                {
                    inwardDateList.add(rs.getString(1));
                }

2)JTable的静态列

headers.add("Pending For Digitization");
            headers.add("Pending For Claim Creation");
            headers.add("Resolution - Pending For Claim Creation");
            headers.add("Pending For Approval");
            headers.add("Pending For Parking");
            headers.add("Pending For Posting");
            headers.add("Objection");
            headers.add("Pending For Payment");
            headers.add("Paid");
            headers.add("Rejected");
            headers.add("Outward");

3)现在这是最重要的代码,我想使其变得更快

for(int i=0;i<inwardDateList.size();i++)
            {
            Vector varsha=new Vector();

             varsha.add(inwardDateList.get(i).toString());

                for(int c=1;c<headers.size();c++)
                {
                    try(Connection con=dbConnection.dbConnector();)
                    {

                        String q="";
                        q=headers.get(c).toString();
                        PreparedStatement ps=con.prepareStatement("Select COUNT_BIG(Inward_No) from Inward_Master where Inward_Date_Short='"+inwardDateList.get(i).toString()+"' AND Claim_Status='"+q+"'");
                        //PreparedStatement ps=con.prepareStatement("Select count(Inward_No) from(Select Inward_No from Inward_Master where Inward_Date_Short='"+inwardDateList.get(i).toString()+"' AND Claim_Status='"+q+"') X");

                        ResultSet rs=ps.executeQuery();
                        rs.next();                      
                        data.add(rs.getInt(1));

                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }

                }
                rowdata.add(data);
            }

0 个答案:

没有答案