Запрос медленного счета - PullRequest
       2

Запрос медленного счета

0 голосов
/ 12 февраля 2019

Я создал запрос, чтобы выяснить, сколько транзакций совершается каждым тикетом в очередях филиала.

Итак, у меня есть Tickets_table с полями Branch, number_of_ticket, issue_date и Ticket_call_time, Ticket_End_time (это время, когда билет перестал обслуживаться)

Transaction_table содержит транзакции, которые совершаются в каждом филиале каждый день.Поля Transaction_Table: Branch, Date и Transaction_time.Чтобы выяснить, какие транзакции выполняются по каждому тикету, я создал запрос, который связывает две таблицы: по ветке и дате, а также по Ticket_table.Ticket_call_time<=Transaction_table.Transaction_time и Ticket_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 голосов
/ 12 февраля 2019

Попробуйте переместить предложения фильтра за пределы объединения:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...