首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >慢速计数查询

慢速计数查询
EN

Stack Overflow用户
提问于 2019-02-12 21:53:51
回答 1查看 27关注 0票数 0

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

所以我有一个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上的两个表连接起来,如下所示:

代码语言:javascript
运行
复制
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的事务数,这是一个经典的方法:

代码语言:javascript
运行
复制
SELECT 
    branchdateticket, 
    count(Transaction_code)
FROM 
    the_query_above
GROUP BY 
    branchdateticket

这个查询大约需要一天的时间才能运行。

你能帮我开快点吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-12 22:04:19

尝试将筛选子句移到联接之外:

代码语言:javascript
运行
复制
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子句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54651640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档