powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Большие запросы много времени уходит
6 сообщений из 6, страница 1 из 1
Большие запросы много времени уходит
    #39367820
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день


Большие запросы много времени уходит как упростить к примеру


МУСКЛ

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
select Chiefname,count(DDD.Streetname) as count_strt, sum(DDD.count_ab) as count_ab2,
                      sum(DDD.sumkol_ab) as sumkol_ab2,sum(DDD.NDT) as NDT2,sum(DDD.NKT) as NKT2,
                      sum(DDD.nchsl) as nchsl2,sum(DDD.summ_oplata) as summ_oplata2,
                      sum(DDD.DT) as DT2,sum(DDD.KT) as KT2
               from (SELECT     
           Section.Chiefname, 
                       Street.Streetname,
                       count(Consum.conscode) as count_ab,
                       sum(Consum.kol_ab) as sumkol_ab,               
                       round(sum(CASE WHEN T_nach_saldo.dolg > 0 THEN T_nach_saldo.dolg else 0 END),0) AS NDT,
                       round(sum(CASE WHEN T_nach_saldo.dolg < 0 THEN T_nach_saldo.dolg else 0 END),0) AS NKT,
           round(sum(V_Nchsl.sum_nchsl),0) as nchsl,
                       round(sum(V_heap3.opl_sum),0) as summ_oplata,
               round(sum(CASE WHEN T_nach_saldo.obshvsch > 0 THEN T_nach_saldo.obshvsch else 0 END),0) AS DT,
                       round(sum(CASE WHEN T_nach_saldo.obshvsch < 0 THEN T_nach_saldo.obshvsch else 0 END),0) AS KT,
               round(sum(T_nach_saldo.dolg+T_nach_saldo.summa-T_nach_saldo.obshvsch),0) as sum_oplata
               FROM Consum RIGHT OUTER JOIN
               (select max(T_nach_saldo.oid) AS MX_OID,
                T_nach_saldo.ab_kart_oid AS ab_kart_oid 
                from T_nach_saldo 
                where (T_nach_saldo.date_pokaz <= '$yearend-$monthend-$dayend 00:00:00')
                group by T_nach_saldo.ab_kart_oid) as V_Saldo ON (Consum.ab_kart_oid = V_Saldo.ab_kart_oid)
                INNER JOIN T_nach_saldo ON (V_Saldo.MX_OID = T_nach_saldo.oid)
                LEFT OUTER JOIN    (SELECT sum(heap.summa) as opl_sum, heap.ab_kart_oid 
                                   FROM heap 
                                   WHERE heap.pdate BETWEEN '$year-$month-$day 00:00:00' AND '$yearend-$monthend-$dayend 00:00:00'
                                   group by heap.ab_kart_oid) as V_heap3 
                ON (Consum.ab_kart_oid = V_heap3.ab_kart_oid)
                
                LEFT OUTER JOIN 

               (select sum(T_nach_saldo.summa) AS sum_nchsl, T_nach_saldo.ab_kart_oid 
                from T_nach_saldo                           
                WHERE T_nach_saldo.date_pokaz BETWEEN '$year-$month-$day 00:00:00' AND '$yearend-$monthend-$dayend 00:00:00'
                GROUP BY T_nach_saldo.ab_kart_oid ) as V_Nchsl 

               ON (Consum.ab_kart_oid = V_Nchsl.ab_kart_oid) 

               INNER JOIN Street ON (Consum.Street_oid = Street.Street_oid) 
               INNER JOIN Section ON (Street.Kont_oid = Section.Kont_oid) 
       
               GROUP BY Section.Chiefname, Street.Streetname
               Order by Section.Chiefname, Street.Streetname) DDD
               GROUP BY DDD.Chiefname
               ORDER BY DDD.Chiefname
...
Рейтинг: 0 / 0
Большие запросы много времени уходит
    #39367918
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что тут можно "упрощать"? если в финале группировка, расчёт групповых значений и сортировка выполняются по динамическому набору?

Да и MySQL это, а жестоко выдранный из кода PHP кусок сборки запроса...
...
Рейтинг: 0 / 0
Большие запросы много времени уходит
    #39368982
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ни чего не понял думаю проблема с индексами
...
Рейтинг: 0 / 0
Большие запросы много времени уходит
    #39369028
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ладно убрал лишнее упростил

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SELECT 
		
			Section.Chiefname,
			Street.Streetname,  
                        count(Consum.conscode) as count_ab,
                        sum(Consum.kol_ab) as sumkol_ab,		        
                        round(sum(CASE WHEN T_nach_saldo.dolg > 0 THEN T_nach_saldo.dolg else 0 END),0) AS NDT,
                        round(sum(CASE WHEN T_nach_saldo.dolg < 0 THEN T_nach_saldo.dolg else 0 END),0) AS NKT,
		        round(sum(CASE WHEN T_nach_saldo.obshvsch > 0 THEN T_nach_saldo.obshvsch else 0 END),0) AS DT,
                        round(sum(CASE WHEN T_nach_saldo.obshvsch < 0 THEN T_nach_saldo.obshvsch else 0 END),0) AS KT,
		        round(sum(T_nach_saldo.dolg+T_nach_saldo.summa-T_nach_saldo.obshvsch),0) as sum_oplata
                FROM Consum RIGHT OUTER JOIN
                (select max(T_nach_saldo.oid) AS MX_OID,
                 T_nach_saldo.ab_kart_oid AS ab_kart_oid 
                 from T_nach_saldo 
                 where (T_nach_saldo.date_pokaz <= '$yearend-$monthend-$dayend 00:00:00')
                 group by T_nach_saldo.ab_kart_oid) as V_Saldo  ON (Consum.ab_kart_oid = V_Saldo.ab_kart_oid)
                 INNER JOIN T_nach_saldo ON (V_Saldo.MX_OID = T_nach_saldo.oid)
                 
                INNER JOIN Street ON (Consum.Street_oid = Street.Street_oid) 
                INNER JOIN Section ON (Street.Kont_oid = Section.Kont_oid) 
        
                GROUP BY Section.Chiefname, Street.Streetname
                Order by Section.Chiefname, Street.Streetname



долго все равно это из за case получается?
...
Рейтинг: 0 / 0
Большие запросы много времени уходит
    #39369030
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингисэто из за case получается?Нет, это из-за того, что таблица, сканируемая самой первой, является подзапросом. Соответственно, неиндексированным.
...
Рейтинг: 0 / 0
Большие запросы много времени уходит
    #39369044
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

я прикрепил файл посмотрите что не так?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Большие запросы много времени уходит
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]