Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Большие запросы много времени уходит / 6 сообщений из 6, страница 1 из 1
15.12.2016, 15:13
    #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
15.12.2016, 16:08
    #39367918
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большие запросы много времени уходит
И что тут можно "упрощать"? если в финале группировка, расчёт групповых значений и сортировка выполняются по динамическому набору?

Да и MySQL это, а жестоко выдранный из кода PHP кусок сборки запроса...
...
Рейтинг: 0 / 0
16.12.2016, 19:45
    #39368982
Чингис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большие запросы много времени уходит
ни чего не понял думаю проблема с индексами
...
Рейтинг: 0 / 0
16.12.2016, 22:08
    #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
16.12.2016, 22:16
    #39369030
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большие запросы много времени уходит
Чингисэто из за case получается?Нет, это из-за того, что таблица, сканируемая самой первой, является подзапросом. Соответственно, неиндексированным.
...
Рейтинг: 0 / 0
16.12.2016, 22:46
    #39369044
Чингис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большие запросы много времени уходит
Akina,

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


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