powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / почему такие тормоза
12 сообщений из 12, страница 1 из 1
почему такие тормоза
    #32574038
дайм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеем хранимую процедуру:
Код: plaintext
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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
CREATE PROCEDURE REP14 (
    C_DATE DATE)
RETURNS (
    W_TYPE INTEGER,
    REC_1 INTEGER,
    REC_2 INTEGER,
    REC_3 INTEGER,
    REC_4 INTEGER,
    REC_5 INTEGER,
    REC_6 INTEGER,
    REC_7 INTEGER,
    REC_ALL INTEGER)
AS
DECLARE VARIABLE ID_TMP INTEGER;
DECLARE VARIABLE W_STAGE1 INTEGER;
DECLARE VARIABLE W_STAGE5 INTEGER;
DECLARE VARIABLE W_TYPE1 INTEGER;
DECLARE VARIABLE W_TYPE5 INTEGER;
BEGIN
     /**/ 
    id_tmp = gen_id(tmp_id_gen,   1 );
     /**/ 
    insert into tmp_stages (id, w_stage1, w_stage5, w_type1, w_type5)
    select :id_tmp, w1.years, w5.years,
        case
            when w1.years <  1  then  1 
            when w1.years between  1  and  2  then  2 
            when w1.years between  3  and  4  then  3 
            when w1.years between  5  and  9  then  4 
            when w1.years between  10  and  14  then  5 
            when w1.years between  15  and  19  then  6 
            when w1.years >=  20  then  7 
            else  0 
        end,
        case
            when w5.years <  1  then  1 
            when w5.years between  1  and  2  then  2 
            when w5.years between  3  and  4  then  3 
            when w5.years between  5  and  9  then  4 
            when w5.years between  10  and  14  then  5 
            when w5.years between  15  and  19  then  6 
            when w5.years >=  20  then  7 
            else  0 
        end
    from workers w
    left join get_worker_stage1(w.id_people, :c_date) w1 on  1  =  1 
    left join get_worker_stage5(w.id_people, :c_date) w5 on  1  =  1 
    where w.w_status in ( 1 );
     /**/ 
    w_type =  1 ;
    while (w_type <  8 ) do
    begin
        select count(*) from tmp_stages where id = :id_tmp and w_type1 = :w_type
            and w_type5 =  1  into :rec_1;
        select count(*) from tmp_stages where id = :id_tmp and w_type1 = :w_type
            and w_type5 =  2  into :rec_2;
        select count(*) from tmp_stages where id = :id_tmp and w_type1 = :w_type
            and w_type5 =  3  into :rec_3;
        select count(*) from tmp_stages where id = :id_tmp and w_type1 = :w_type
            and w_type5 =  4  into :rec_4;
        select count(*) from tmp_stages where id = :id_tmp and w_type1 = :w_type
            and w_type5 =  5  into :rec_5;
        select count(*) from tmp_stages where id = :id_tmp and w_type1 = :w_type
            and w_type5 =  6  into :rec_6;
        select count(*) from tmp_stages where id = :id_tmp and w_type1 = :w_type
            and w_type5 =  7  into :rec_7;
        rec_all = :rec_1 + rec_2 + rec_3 + rec_4 + rec_5 + rec_6 + rec_7;
         /**/ 
        w_type = w_type +  1 ;
         /**/ 
        suspend;
    end
     /**/ 
    delete from tmp_stages where id = :id_tmp;
END

потом я решил избавиться от while () ...
Код: plaintext
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.
    for select
            s.w_type1,
            count(s1.id),
            count(s2.id),
            count(s3.id),
            count(s4.id),
            count(s5.id),
            count(s6.id),
            count(s7.id)
        from tmp_stages s
        left join tmp_stages s1 on s1.id = :id_tmp and s1.w_type1 = s.w_type1
            and s1.w_type5 =  1 
        left join tmp_stages s2 on s2.id = :id_tmp and s2.w_type1 = s.w_type1
            and s2.w_type5 =  2 
        left join tmp_stages s3 on s3.id = :id_tmp and s3.w_type1 = s.w_type1
            and s3.w_type5 =  3 
        left join tmp_stages s4 on s4.id = :id_tmp and s4.w_type1 = s.w_type1
            and s4.w_type5 =  4 
        left join tmp_stages s5 on s5.id = :id_tmp and s5.w_type1 = s.w_type1
            and s5.w_type5 =  5 
        left join tmp_stages s6 on s6.id = :id_tmp and s6.w_type1 = s.w_type1
            and s6.w_type5 =  6 
        left join tmp_stages s7 on s7.id = :id_tmp and s7.w_type1 = s.w_type1
            and s7.w_type5 =  7 
        where s.id = :id_tmp
        group by s.w_type1
        into :w_type, :rec_1,  :rec_2, :rec_3, :rec_4, :rec_5, :rec_6, :rec_7
    do suspend;
получил неимоверные тормоза ..., из-за чего?
...
Рейтинг: 0 / 0
почему такие тормоза
    #32574063
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в первом варианте разве работало ?
Не говори, что да. Не может этого быть...:)
А тормоза из-за внеших соединений и группировки.
...
Рейтинг: 0 / 0
почему такие тормоза
    #32574073
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что это ты вычисляешь такое? Очень страшное на вид нечто, похожее на декартово произведение множеств. Ты скажи что надо сделать?
...
Рейтинг: 0 / 0
почему такие тормоза
    #32574131
дайм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Johnmen - если бы не работала, я бы и не спрашивал. все замечательно работает.

неужели действительно присоеденение таблиц и группировка вызывают такие тормоза?

причем что интересно, при join`е трех таблиц - работает быстро, после четвертой - лавинообразно падает.

нет, не пересечение.

есть сотрудники, которые работают в нашем ОАО.
Есть стаж - по больничному листу и стаж работы на данном предприятии.

нужно построит отчет, в котором в роли столбцов стаж на предприятии,
в роли строк - стаж по больничному листу.
...
Рейтинг: 0 / 0
почему такие тормоза
    #32574225
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, уже пора делать форум для программистов АО Энерго. В каждом АО, каждых эл.сетях куча народа мается над одними и теми же задачами.
Чем же занимается ГВЦ Энергетики? :)
...
Рейтинг: 0 / 0
почему такие тормоза
    #32574283
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vl2000Чем же занимается ГВЦ Энергетики? :)
Высчитывает куда Чубайсу загнать деньги - в какие акции. Например, сейчас - в акции ЖКХ.
...
Рейтинг: 0 / 0
почему такие тормоза
    #32574299
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, дошло ! У тебя же внешнее соединение, причем ХП "снаружи" соединения !
Поэтому и проходит первый вариант.
А чуть не так - и облом...
:)))
...
Рейтинг: 0 / 0
почему такие тормоза
    #32574833
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to дайм. Паскудный запрос, отсюда и тормоза. Его можно переделать и скорость резко возрастет. На форуме такое где-то было.
...
Рейтинг: 0 / 0
почему такие тормоза
    #32580259
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 дайм
Вот ты мне объясни неразумному, а что вообще этот отчет дает вашим еб...тым бухгалтерам? РАО подобных данных не требует...

Чем же занимается ГВЦ Энергетики? :)
Издевается распостранением своих глюкавых программ над остальными АО энерго. Почему глюкавых - потому что у программеров нет времени отладить код. Почему нет времени отладить... по определению, задание им (и нам) дают "штоб вчера было готово типа", да и опыта у них маловато я так понял, иногда откровенные поделки попадаются.

...
Рейтинг: 0 / 0
почему такие тормоза
    #32581050
Scalder1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри за офтоп...
Но один раз видел когда организация входящее в эту "светлую организацию" вела зарплату сотрудников на московской программе написанной на Excel
Теперь понятно почему они там пишут :)
...
Рейтинг: 0 / 0
почему такие тормоза
    #32581173
дайм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to viman

Тох, они мне месяц мозгу имели, типа бы посмотреть этот отчет надо (больные на голову тетки, серьезно). Прикол в том, что строится он раз в год. А этим дурам лень в ручную посчитать ..., нда
...
Рейтинг: 0 / 0
почему такие тормоза
    #32582330
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scalder1Сорри за офтоп...
Но один раз видел когда организация входящее в эту "светлую организацию" вела зарплату сотрудников на московской программе написанной на Excel
Теперь понятно почему они там пишут :)
Не ну не все так плохо на самом деле. Просто есть софт от гвц которым нужно пользоваться, а есть софт который можно купить (или выбрать что то еще, парус например)... и то и другое обычно г...о полное. Сколько работаю ни одной нормальной программы не видел и лестных отзывов не слышал...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / почему такие тормоза
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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