Страница 1 из 1

оптимизация autostatus

Добавлено: 20 июн 2022, 20:19
yuranikspb
Реально ли, как то оптимзировать ? очень грузят цпу.
ниже пример sql запроса на i5 выполняется около 70 сек ( отловлено через лог медленный запросов sql)

Код: Выделить всё

select 
  e.*, 
  (
    if(
      (
        select 
          SUM(
            (
              (msq.field_352 + 0)-(msq.field_353 + 0)
            )
          ) 
        from 
          app_entity_39 msq 
        where 
          msq.field_365 = e.id 
        limit 
          1
      ), 
      (
        IFNULL(
          (
            select 
              SUM(
                (
                  msq.field_439 *(msq.field_440 + 0)
                )
              ) 
            from 
              app_entity_44 msq 
            where 
              msq.field_437 = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(e.field_324, 0)+ IFNULL(
          (
            select 
              SUM(msq.field_488) 
            from 
              app_entity_47 msq 
            where 
              msq.field_490 = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(
          (
            select 
              SUM(
                (
                  IFNULL(
                    (msq.field_493 + 0), 
                    0
                  )+ IFNULL(
                    (
                      IFNULL(
                        (msq.field_498 + 0), 
                        0
                      )* IFNULL(
                        (msq.field_500 + 0), 
                        0
                      )
                    ), 
                    0
                  )+ IFNULL(
                    (
                      (msq.field_499 + 0)* 20
                    ), 
                    0
                  )+ IFNULL(
                    (
                      IFNULL(
                        (msq.field_525 + 0), 
                        0
                      )* IFNULL(
                        (msq.field_526 + 0), 
                        0
                      )
                    ), 
                    0
                  )+ IFNULL(
                    (
                      (
                        IFNULL(msq.field_537, 0)* IFNULL(
                          (msq.field_529 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(msq.field_538, 0)* IFNULL(
                          (msq.field_531 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(msq.field_539, 0)* IFNULL(
                          (msq.field_533 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(msq.field_540, 0)* IFNULL(
                          (msq.field_535 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(
                          (msq.field_542 + 0), 
                          0
                        )* IFNULL(msq.field_543, 0)
                      )
                    ), 
                    0
                  )
                )
              ) 
            from 
              app_entity_30 msq 
            where 
              parent_item_id = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(
          (
            select 
              SUM(
                (
                  (msq.field_417 + 0)* msq.field_418
                )
              ) 
            from 
              app_entity_40 msq 
            where 
              msq.field_545 = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(e.field_548, 0)- IFNULL(e.field_495, 0)
      )-(
        select 
          SUM(
            (
              (msq.field_352 + 0)-(msq.field_353 + 0)
            )
          ) 
        from 
          app_entity_39 msq 
        where 
          msq.field_365 = e.id 
        limit 
          1
      ), 
      (
        IFNULL(
          (
            select 
              SUM(
                (
                  msq.field_439 *(msq.field_440 + 0)
                )
              ) 
            from 
              app_entity_44 msq 
            where 
              msq.field_437 = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(e.field_324, 0)+ IFNULL(
          (
            select 
              SUM(msq.field_488) 
            from 
              app_entity_47 msq 
            where 
              msq.field_490 = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(
          (
            select 
              SUM(
                (
                  IFNULL(
                    (msq.field_493 + 0), 
                    0
                  )+ IFNULL(
                    (
                      IFNULL(
                        (msq.field_498 + 0), 
                        0
                      )* IFNULL(
                        (msq.field_500 + 0), 
                        0
                      )
                    ), 
                    0
                  )+ IFNULL(
                    (
                      (msq.field_499 + 0)* 20
                    ), 
                    0
                  )+ IFNULL(
                    (
                      IFNULL(
                        (msq.field_525 + 0), 
                        0
                      )* IFNULL(
                        (msq.field_526 + 0), 
                        0
                      )
                    ), 
                    0
                  )+ IFNULL(
                    (
                      (
                        IFNULL(msq.field_537, 0)* IFNULL(
                          (msq.field_529 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(msq.field_538, 0)* IFNULL(
                          (msq.field_531 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(msq.field_539, 0)* IFNULL(
                          (msq.field_533 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(msq.field_540, 0)* IFNULL(
                          (msq.field_535 + 0), 
                          0
                        )
                      ) +(
                        IFNULL(
                          (msq.field_542 + 0), 
                          0
                        )* IFNULL(msq.field_543, 0)
                      )
                    ), 
                    0
                  )
                )
              ) 
            from 
              app_entity_30 msq 
            where 
              parent_item_id = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(
          (
            select 
              SUM(
                (
                  (msq.field_417 + 0)* msq.field_418
                )
              ) 
            from 
              app_entity_40 msq 
            where 
              msq.field_545 = e.id 
            limit 
              1
          ), 
          0
        )+ IFNULL(e.field_548, 0)- IFNULL(e.field_495, 0)
      )
    )
  ) as field_343, 
  IFNULL(
    (
      select 
        SUM(
          (
            (msq.field_352 + 0)-(msq.field_353 + 0)
          )
        ) 
      from 
        app_entity_39 msq 
      where 
        msq.field_365 = e.id 
      limit 
        1
    ), 
    0
  ) as field_367, 
  IFNULL(
    (
      select 
        SUM(
          (
            msq.field_439 *(msq.field_440 + 0)
          )
        ) 
      from 
        app_entity_44 msq 
      where 
        msq.field_437 = e.id 
      limit 
        1
    ), 
    0
  ) as field_471, 
  IFNULL(
    (
      select 
        SUM(msq.field_488) 
      from 
        app_entity_47 msq 
      where 
        msq.field_490 = e.id 
      limit 
        1
    ), 
    0
  ) as field_491, 
  IFNULL(
    (
      select 
        SUM(
          (
            IFNULL(
              (msq.field_493 + 0), 
              0
            )+ IFNULL(
              (
                IFNULL(
                  (msq.field_498 + 0), 
                  0
                )* IFNULL(
                  (msq.field_500 + 0), 
                  0
                )
              ), 
              0
            )+ IFNULL(
              (
                (msq.field_499 + 0)* 20
              ), 
              0
            )+ IFNULL(
              (
                IFNULL(
                  (msq.field_525 + 0), 
                  0
                )* IFNULL(
                  (msq.field_526 + 0), 
                  0
                )
              ), 
              0
            )+ IFNULL(
              (
                (
                  IFNULL(msq.field_537, 0)* IFNULL(
                    (msq.field_529 + 0), 
                    0
                  )
                ) +(
                  IFNULL(msq.field_538, 0)* IFNULL(
                    (msq.field_531 + 0), 
                    0
                  )
                ) +(
                  IFNULL(msq.field_539, 0)* IFNULL(
                    (msq.field_533 + 0), 
                    0
                  )
                ) +(
                  IFNULL(msq.field_540, 0)* IFNULL(
                    (msq.field_535 + 0), 
                    0
                  )
                ) +(
                  IFNULL(
                    (msq.field_542 + 0), 
                    0
                  )* IFNULL(msq.field_543, 0)
                )
              ), 
              0
            )
          )
        ) 
      from 
        app_entity_30 msq 
      where 
        parent_item_id = e.id 
      limit 
        1
    ), 
    0
  ) as field_494, 
  IFNULL(
    (
      select 
        SUM(
          (
            (msq.field_417 + 0)* msq.field_418
          )
        ) 
      from 
        app_entity_40 msq 
      where 
        msq.field_545 = e.id 
      limit 
        1
    ), 
    0
  ) as field_547, 
  rukovoditel_days_diff(
    e.field_544, 1655745022, '', '', ''
  ) as field_622 
from 
  app_entity_29 e 
where 
  e.id > 0 
having 
  (
    (field_343 = 0)
  )

Re: оптимизация autostatus

Добавлено: 21 июн 2022, 07:44
support
Возможно и можно оптимизировать, но надо понимать на какой странице происходит данный запрос. Вот в версии 3.2 будут сови логи, там будет понятно где возникает проблема
https://vk.com/rukovoditel_project?w=wall-80230319_1477

Re: оптимизация autostatus

Добавлено: 21 июн 2022, 18:22
Vladzimir
Я думаю достаточно будет проставить индексы на поле, везде где "where msq.field_"

Re: оптимизация autostatus

Добавлено: 20 июл 2022, 17:09
yuranikspb
Vladzimir писал(а): 21 июн 2022, 18:22 Я думаю достаточно будет проставить индексы на поле, везде где "where msq.field_"
индексы я могу поставить в mysql
а в crm то не поставить

Re: оптимизация autostatus

Добавлено: 22 июл 2022, 14:34
Vladzimir
А вам "шашечки" или "ехать"?

Re: оптимизация autostatus

Добавлено: 22 июл 2022, 14:42
nruslan2
имхо совет: выкинуть данный код! и поле sql! и использовать поле php!