У меня есть два запроса, из которых я создал один, который дает мне полные данные, но проблема в том, что выполнение занимает так много времени.
Я использую несколько случаев из-за этогоэто занимает так много времени, я просто хочу знать, могу ли я свести его к минимуму, чтобы он не влиял на мой вывод, а выполнялся быстрее.
Query1
select outlet, sum(netamount)
from syncbill
where cancelled<>'Y'
and year(curdate())=year(billdate)
and month(curdate())=month(billdate)
group by OUTLET;
Query2
select outlet,sum(netamount)
from syncbill
where cancelled<>'Y'
and year(curdate())=year(billdate)
group by OUTLET;
Я объединяю два вышеупомянутых запроса, чтобы получить результат за один раз
новый запрос
select b.CUSTOMERDESCRIPTOR as outlet,
round(sum(case when year(curdate())=year(a.billdate) and month(curdate())=month(a.billdate) then a.netamount else 0 end)) as monthAmount,
ROUND(SUM(CASE WHEN YEAR(CURDATE() + INTERVAL 9 MONTH) = YEAR(billdate + INTERVAL 9 MONTH) THEN netamount ELSE 0 END)) as yearAmount ,
round(Sum(case when a.billdate >= date(now()) then a.netamount else 0 end)) as Transaction
from syncbill a Inner Join
ecustomer b
on a.outlet = b.CUSTOMERIDENTIFIER
where a.cancelled <> 'Y' and
outlet in (select CUSTOMERIDENTIFIER from mt_distributrol where mt_distributr_vcdistributrcode = 'AAAA')
group by a.OUTLET
В этом запросе я делаю
Расчет данных текущего месяца и данных текущего года (финансового года), если есть данные, а затем данные 0
.
Но этозанимает так много времени, что кажется очень плохим пользовательским опытом.Как я могу минимизировать это?
Редактировать
Я сделал новый запрос после создания индексов, но запрос показывает ошибку.Вот мой запрос:
select outlet,round(sum(case when year(curdate())=year(billdate) and month(curdate())=month(billdate) then netamount else 0 end)) as monthAmount, ROUND(SUM(CASE WHEN YEAR(CURDATE() + INTERVAL 9 MONTH) = YEAR(billdate + INTERVAL 9 MONTH) THEN netamount ELSE 0 END)) as yearAmount , round(Sum(case when billdate >= date(now()) then netamount else 0 end)) as Transaction from syncbill where cancelled<>'Y' and force index (ix_cancelled, ix_outlet) and force INDEX (ix_outlet) FOR group by OUTLET
Это ошибка, которую я получаю
запрос с силой
select b.CUSTOMERDESCRIPTOR as outlet,round(sum(case when year(curdate())=year(a.billdate) and month(curdate())=month(a.billdate) then a.netamount else 0 end)) as monthAmount, ROUND(SUM(CASE WHEN YEAR(CURDATE() + INTERVAL 9 MONTH) = YEAR(billdate + INTERVAL 9 MONTH) THEN netamount ELSE 0 END)) as yearAmount , round(Sum(case when a.billdate >= date(now()) then a.netamount else 0 end)) as Transaction from syncbill a force index (ix_cancelled_OUTLET_billdate) Inner Join ecustomer b on a.outlet = b.CUSTOMERIDENTIFIER where a.cancelled<>'Y' and outlet in(select CUSTOMERIDENTIFIER from mt_distributrol where mt_distributr_vcdistributrcode = 'AAAA') group by a.OUTLET



