慢计数查询

时间:2019-02-12 13:53:51

标签: sql performance ms-access

我创建了一个查询,以查找分支队列中的每个票证进行了多少笔交易。

所以我有一个Tickets_table,它的字段为Branchnumber_of_ticketissue_dateTicket_call_timeTicket_End_time(这是时间票已停止送达)

Transaction_table拥有每天在每个分支机构进行的交易。 Transaction_Table的字段是BranchDateTransaction_time。为了找到每张票证进行的交易,我创建了一个查询,该查询连接了分支和日期以及Ticket_table.Ticket_call_time<=Transaction_table.Transaction_timeTicket_table.Ticket_End_time>=Transaction_table.End_time上的两个表,如下所示:

SELECT 
    Transaction_table.Branch, 
    Tickets_table.Ticket, 
    Tickets_table.Date, 
    Transactions_Table.Transaction_Time, 
    Ticket_table.Ticket_call_time, 
    Ticket_table.Ticket_End_time, 
    QTicket_table.Ticket_Call_time, 
    Transaction_table.Transaction_code, 
    [Branch] & [Date] & [Ticket] AS branchdateticket
FROM 
    Transactions_Table 
    INNER JOIN 
    Tickets_Table 
        ON (Transaction_table.Branch = Ticket_table.Branch) AND 
            Transaction_table.Date = Ticket_table.Date AND 
            Ticket_table.Ticket_call_time<=Transaction_table.Transaction_time AND 
            Ticket_table.Ticket_End_time>=Transaction_table.End_time);

此查询工作正常。

我有一个表,该表针对每个票证,分支和日期的组合进行了交易,但有数百万行。我试图再次进行查询以计算最后一列branchdateticket的交易次数,这是经典的做法:

SELECT 
    branchdateticket, 
    count(Transaction_code)
FROM 
    the_query_above
GROUP BY 
    branchdateticket

此查询大约需要一天的时间。

您能帮我加快速度吗?

1 个答案:

答案 0 :(得分:0)

尝试将过滤器子句移到联接之外:

SELECT Transaction_table.Branch, Tickets_table.Ticket, Tickets_table.Date, Transactions_Table.Transaction_Time, Ticket_table.Ticket_call_time, Ticket_table.Ticket_End_time, QTicket_table.Ticket_Call_time, Transaction_table.Transaction_code, [Branch] & [Date] & [Ticket] AS branchdateticket
FROM Transactions_Table 
INNER JOIN Tickets_Table 
    ON (Transaction_table.Branch = Ticket_table.Branch) AND  Transaction_table.Date = Ticket_table.Date)
WHERE
Ticket_table.Ticket_call_time <= Transaction_table.Transaction_time and Ticket_table.Ticket_End_time >= Transaction_table.End_time;

或将查询一分为二-第一个不带where子句;第二个具有第一个查询作为源并包括where子句。