powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Тормоза в FB 3 при использовании процедуры List_to_rows
13 сообщений из 13, страница 1 из 1
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340290
Minkus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте

есть процедура
Код: plsql
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.
create or alter procedure Msp_List_To_Rows (
    Lst varchar(1000))
returns (
    Id integer)
AS
declare pos_ int;
  declare offset_ int = 1;
  declare beg int;
  declare buf varchar(8000);
begin
  lst = coalesce(LST, '');
  while (0=0) do begin
    buf = substring(lst from offset_ for 8000);
    pos_ = 1; beg = 1;
    while (pos_ <= char_length(buf) and pos_ <= 8000) do begin
      if (substring(buf from pos_ for 1) = ',') then begin
        if (pos_ > beg) then
          id = substring(buf from beg for pos_ - beg);
        else
          id = null;
        suspend;
        beg = pos_ + 1;
      end
      pos_ = pos_ + 1;
    end
    if (offset_ + pos_ - 2 = char_length(lst)) then leave;
    offset_ = offset_ + beg - 1;
    if (offset_ > char_length(lst)) then leave;
  end

  if (pos_ > beg) then
    id = substring(buf from beg for pos_ - beg);
  else
    id = null;
  suspend;
end



в фб 2.5 join-ы очень быстро проходили, но при переходе на 3.0 начались тормоза 0.3 сек в фб2.5 против 7сек в фб3,
если явно указать
Код: plsql
1.
 in (value1, value2...)

то все работает идеально.

как победить? нет ли в фб3 встроенного split-a более быстрого?

Спасибо!
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340299
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспроизводимый пример можно?
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340390
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minkus,

попробуй вот это

Код: plsql
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.
CREATE OR ALTER PROCEDURE SP_SPLIT (
    LST VARCHAR(1000))
RETURNS (
    ID INTEGER)
AS
DECLARE i INT = 1;
DECLARE l INT;
DECLARE p INT;
DECLARE s VARCHAR(18);
BEGIN
  LST = COALESCE(LST, '');
  l = CHAR_LENGTH(LST);
  WHILE (i <= l) DO
  BEGIN
    p = POSITION(',', LST, i);
    IF (p = 0) THEN
      p = l + 1;
    s = SUBSTRING(LST FROM i FOR p - i);
    IF (s = '') THEN
      id = NULL;
    ELSE
      id = CAST(s AS INT);
    SUSPEND;
    i = p + 1;
  END
END
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340405
Minkus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-- использую sp_split --------
------ Performance info ------
Prepare time = 31ms
Execute time = 2s 750ms
Current memory = 175 838 032
Max memory = 0
Memory buffers = 2 048
Reads from disk to cache = 1 109
Writes from cache to disk = 18
Fetches from cache = 2 138 557



-- через execute statement
-- подставляю напрямую значения
------ Performance info ------
Prepare time = 110ms
Execute time = 0ms
Current memory = 176 174 120
Max memory = 0
Memory buffers = 2 048
Reads from disk to cache = 5
Writes from cache to disk = 0
Fetches from cache = 3 122
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340406
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minkus-- использую sp_split --------
------ Performance info ------
Это фигня, ты планы показывай. И собственно запросы, а то кто ж знает каким кривоспособом
ты его используешь...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340637
Minkus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос 1
Код: plsql
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.
76.
select J.Docid, D.data, D.Dt,
       (select Name
        from Ts_Customer
        where Customerid = Dt) Dtname, D.Ct,
       (select Name
        from Ts_Customer
        where Customerid = Ct) Ctname, D.Doctypeid,
       (select Title
        from Ts_Doctypes
        where Ts_Doctypes.Doctypeid = D.Doctypeid) Doctypename, D.Created_By,
       (select Full_Name
        from Ts_Users
        where Ts_Users.Userid = D.Created_By), D.Created_Date, J.Goodsid, G.Title, J.Qty,
       J.Price * D.Rate / D.Rateusd Price, J.Suma * D.Rate / D.Rateusd J_Suma, D.Flags, D.Suma, D.Rateusd, D.Dtdep,
       Stoc_Dt.Title Dtdep_Name, D.Ctdep, Stoc_Ct.Title Ctdep_Name
from Tdb_Jurnal J
inner join Tdb_Docs D on (D.Docid = J.Docid) and
      (Get_Flag_Value((select Flagvalue
                       from Sp_Get_Flagvalue(Doctypeid)), 5) = 1 or Get_Flag_Value((select Flagvalue
                                                                                    from Sp_Get_Flagvalue(Doctypeid)), 3) = 1) and
      D.Dt in (5213, 10103, 12057, 25527, 27268, 36452, 66468, 72699, 92485, 123025,
               211667, 212049, 218482, 221355, 222075)
inner join Ts_Goods G on G.Goodsid = J.Goodsid and
      J.Goodsid = :Goodsid_In
inner join Ts_Stocks Stoc_Dt on Stoc_Dt.Stockid = D.Dtdep
inner join Ts_Stocks Stoc_Ct on Stoc_Ct.Stockid = D.Ctdep
union all
select Sp.Docid, D.data, D.Dt,
       (select Name
        from Ts_Customer
        where Customerid = Dt) Dtname, D.Ct,
       (select Name
        from Ts_Customer
        where Customerid = Ct) Ctname, D.Doctypeid,
       (select Title
        from Ts_Doctypes
        where Ts_Doctypes.Doctypeid = D.Doctypeid) Doctypename, D.Created_By,
       (select Full_Name
        from Ts_Users
        where Ts_Users.Userid = D.Created_By), D.Created_Date, Sp.Dt_Goodsid, G1.Title, -1,
       Sp.Dt_Price * D.Rate / D.Rateusd, Sp.Dt_Price * D.Rate / D.Rateusd, D.Flags, D.Suma, D.Rateusd, D.Dtdep,
       Stoc_Dt.Title Dtdep_Name, D.Ctdep, Stoc_Ct.Title Ctdep_Name
from Tdb_Jurnal_Sp Sp
inner join Tdb_Docs D on (D.Docid = Sp.Docid) and
      D.Dt in (5213, 10103, 12057, 25527, 27268, 36452, 66468, 72699, 92485, 123025,
               211667, 212049, 218482, 221355, 222075)
inner join Ts_Goods G1 on G1.Goodsid = Sp.Dt_Goodsid and
      Sp.Dt_Goodsid = :Goodsid_In
inner join Ts_Stocks Stoc_Dt on Stoc_Dt.Stockid = D.Dtdep
inner join Ts_Stocks Stoc_Ct on Stoc_Ct.Stockid = D.Ctdep

union all

select Sp.Docid, D.data, D.Dt,
       (select Name
        from Ts_Customer
        where Customerid = Dt) Dtname, D.Ct,
       (select Name
        from Ts_Customer
        where Customerid = Ct) Ctname, D.Doctypeid,
       (select Title
        from Ts_Doctypes
        where Ts_Doctypes.Doctypeid = D.Doctypeid) Doctypename, D.Created_By,
       (select Full_Name
        from Ts_Users
        where Ts_Users.Userid = D.Created_By), D.Created_Date, Sp.Dt_Goodsid, G2.Title, 1,
       Sp.Ct_Price * D.Rate / D.Rateusd, Sp.Ct_Price * D.Rate / D.Rateusd, D.Flags, D.Suma, D.Rateusd, D.Dtdep,
       Stoc_Dt.Title Dtdep_Name, D.Ctdep, Stoc_Ct.Title Ctdep_Name
from Tdb_Jurnal_Sp Sp
inner join Tdb_Docs D on (D.Docid = Sp.Docid) and
      D.Dt in (5213, 10103, 12057, 25527, 27268, 36452, 66468, 72699, 92485, 123025,
               211667, 212049, 218482, 221355, 222075)
inner join Ts_Goods G2 on G2.Goodsid = Sp.Ct_Goodsid and
      Sp.Ct_Goodsid = :Goodsid_In
inner join Ts_Stocks Stoc_Dt on Stoc_Dt.Stockid = D.Dtdep
inner join Ts_Stocks Stoc_Ct on Stoc_Ct.Stockid = D.Ctdep 



план 1
Plan
PLAN (SP_GET_FLAGVALUE NATURAL)
PLAN (SP_GET_FLAGVALUE NATURAL)
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_DOCTYPES INDEX (PK_TS_DOCTYPES))
PLAN (TS_USERS INDEX (PK_TS_USERS))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_DOCTYPES INDEX (PK_TS_DOCTYPES))
PLAN (TS_USERS INDEX (PK_TS_USERS))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_DOCTYPES INDEX (PK_TS_DOCTYPES))
PLAN (TS_USERS INDEX (PK_TS_USERS))
PLAN (JOIN (G INDEX (PK_TS_GOODS), J INDEX (FK_TDB_JURNAL_5), D INDEX (PK_TDB_DOCS), STOC_DT INDEX (PK_TS_STOCKS), STOC_CT INDEX (PK_TS_STOCKS)), JOIN (G1 INDEX (PK_TS_GOODS), SP INDEX (FK_TDB_JURNAL_SP_2), D INDEX (PK_TDB_DOCS), STOC_DT INDEX (PK_TS_STOCKS), STOC_CT INDEX (PK_TS_STOCKS)), JOIN (G2 INDEX (PK_TS_GOODS), SP INDEX (FK_TDB_JURNAL_SP_6), D INDEX (PK_TDB_DOCS), STOC_DT INDEX (PK_TS_STOCKS), STOC_CT INDEX (PK_TS_STOCKS)))


sql split
Код: plsql
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.
76.
77.
SELECT J.DOCID, D.DATA, D.DT,
                   (SELECT NAME
                    FROM TS_CUSTOMER
                    WHERE CUSTOMERID = DT) DTNAME, D.CT,
                   (SELECT NAME
                    FROM TS_CUSTOMER
                    WHERE CUSTOMERID = CT) CTNAME, D.DOCTYPEID,
                   (SELECT TITLE
                    FROM TS_DOCTYPES
                    WHERE TS_DOCTYPES.DOCTYPEID = D.DOCTYPEID) DOCTYPENAME, D.CREATED_BY,
                   (SELECT FULL_NAME
                    FROM TS_USERS
                    WHERE TS_USERS.USERID = D.CREATED_BY), D.CREATED_DATE, J.GOODSID, G.TITLE, J.QTY,
                   J.PRICE * D.RATE / D.RATEUSD PRICE, J.SUMA * D.RATE / D.RATEUSD j_suma, D.FLAGS, D.SUMA, D.RATEUSD,
                   D.DTDEP,
                   STOC_DT.TITLE DTDEP_NAME,
                   D.CTDEP,
                   STOC_CT.TITLE CTDEP_NAME
            FROM TDB_JURNAL J
            INNER JOIN TDB_DOCS D ON (D.DOCID = J.DOCID) and (GET_FLAG_VALUE((SELECT FLAGVALUE FROM SP_GET_FLAGVALUE(DOCTYPEID)), 5) = 1 OR
                                                             GET_FLAG_VALUE((SELECT FLAGVALUE FROM SP_GET_FLAGVALUE(DOCTYPEID)), 3) = 1)
            inner join (select id from sp_split('5213,10103,12057,25527,27268,36452,66468,72699,92485,123025,211667,212049,218482,221355,222075')) cc on cc.id=d.dt
            INNER JOIN TS_GOODS G ON G.GOODSID = J.GOODSID and J.GOODSID = :GOODSID_IN
            INNER JOIN TS_STOCKS STOC_DT ON STOC_DT.STOCKID=D.DTDEP
            INNER JOIN TS_STOCKS STOC_CT ON STOC_CT.STOCKID=D.CTDEP
UNION ALL
            SELECT SP.DOCID, D.DATA, D.DT,
                   (SELECT NAME
                    FROM TS_CUSTOMER
                    WHERE CUSTOMERID = DT) DTNAME, D.CT,
                   (SELECT NAME
                    FROM TS_CUSTOMER
                    WHERE CUSTOMERID = CT) CTNAME, D.DOCTYPEID,
                   (SELECT TITLE
                    FROM TS_DOCTYPES
                    WHERE TS_DOCTYPES.DOCTYPEID = D.DOCTYPEID) DOCTYPENAME, D.CREATED_BY,
                   (SELECT FULL_NAME
                    FROM TS_USERS
                    WHERE TS_USERS.USERID = D.CREATED_BY), D.CREATED_DATE, SP.DT_GOODSID, G1.TITLE, -1,
                   SP.DT_PRICE * D.RATE / D.RATEUSD, SP.DT_PRICE * D.RATE / D.RATEUSD, D.FLAGS, D.SUMA, D.RATEUSD,
                   D.DTDEP,
                   STOC_DT.TITLE DTDEP_NAME,
                   D.CTDEP,
                   STOC_CT.TITLE CTDEP_NAME
            FROM TDB_JURNAL_SP SP
            INNER JOIN TDB_DOCS D ON (D.DOCID = SP.DOCID)
            inner join (select id from sp_split('5213,10103,12057,25527,27268,36452,66468,72699,92485,123025,211667,212049,218482,221355,222075')) cc on cc.id = d.dt
            INNER JOIN TS_GOODS G1 ON G1.GOODSID = SP.DT_GOODSID and SP.DT_GOODSID = :GOODSID_IN
            INNER JOIN TS_STOCKS STOC_DT ON STOC_DT.STOCKID=D.DTDEP
            INNER JOIN TS_STOCKS STOC_CT ON STOC_CT.STOCKID=D.CTDEP

UNION ALL

            SELECT SP.DOCID, D.DATA, D.DT,
                   (SELECT NAME
                    FROM TS_CUSTOMER
                    WHERE CUSTOMERID = DT) DTNAME, D.CT,
                   (SELECT NAME
                    FROM TS_CUSTOMER
                    WHERE CUSTOMERID = CT) CTNAME, D.DOCTYPEID,
                   (SELECT TITLE
                    FROM TS_DOCTYPES
                    WHERE TS_DOCTYPES.DOCTYPEID = D.DOCTYPEID) DOCTYPENAME, D.CREATED_BY,
                   (SELECT FULL_NAME
                    FROM TS_USERS
                    WHERE TS_USERS.USERID = D.CREATED_BY), D.CREATED_DATE, SP.DT_GOODSID, G2.TITLE, 1,
                   SP.CT_PRICE * D.RATE / D.RATEUSD, SP.CT_PRICE * D.RATE / D.RATEUSD, D.FLAGS, D.SUMA, D.RATEUSD,
                   D.DTDEP,
                   STOC_DT.TITLE DTDEP_NAME,
                   D.CTDEP,
                   STOC_CT.TITLE CTDEP_NAME
            FROM TDB_JURNAL_SP SP
            INNER JOIN TDB_DOCS D ON (D.DOCID = SP.DOCID)
            inner join (select id from sp_split('5213,10103,12057,25527,27268,36452,66468,72699,92485,123025,211667,212049,218482,221355,222075')) cc on cc.id=d.dt
            INNER JOIN TS_GOODS G2 ON G2.GOODSID = SP.CT_GOODSID and SP.CT_GOODSID = :GOODSID_IN
            INNER JOIN TS_STOCKS STOC_DT ON STOC_DT.STOCKID=D.DTDEP
            INNER JOIN TS_STOCKS STOC_CT ON STOC_CT.STOCKID=D.CTDEP




plan 2 (split)Plan
PLAN (SP_GET_FLAGVALUE NATURAL)
PLAN (SP_GET_FLAGVALUE NATURAL)
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_DOCTYPES INDEX (PK_TS_DOCTYPES))
PLAN (TS_USERS INDEX (PK_TS_USERS))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_DOCTYPES INDEX (PK_TS_DOCTYPES))
PLAN (TS_USERS INDEX (PK_TS_USERS))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_CUSTOMER INDEX (PK_TS_CUSTOMER))
PLAN (TS_DOCTYPES INDEX (PK_TS_DOCTYPES))
PLAN (TS_USERS INDEX (PK_TS_USERS))
PLAN (JOIN (JOIN (JOIN (CC SP_SPLIT NATURAL, D INDEX (FK_TDB_DOCS_1)), STOC_DT INDEX (PK_TS_STOCKS), STOC_CT INDEX (PK_TS_STOCKS), J INDEX (TDB_JURNAL_IDX1)), G INDEX (PK_TS_GOODS)), JOIN (JOIN (JOIN (CC SP_SPLIT NATURAL, D INDEX (FK_TDB_DOCS_1)), SP INDEX (TDB_JURNAL_SP_IDX1), STOC_DT INDEX (PK_TS_STOCKS), STOC_CT INDEX (PK_TS_STOCKS)), G1 INDEX (PK_TS_GOODS)), JOIN (JOIN (JOIN (CC SP_SPLIT NATURAL, D INDEX (FK_TDB_DOCS_1)), SP INDEX (TDB_JURNAL_SP_IDX2), STOC_DT INDEX (PK_TS_STOCKS), STOC_CT INDEX (PK_TS_STOCKS)), G2 INDEX (PK_TS_GOODS)))
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340667
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minkus,

а вот так?

Код: 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.
create or alter procedure ZLS$LIST_TO_ROWS( -- Преобразовать список через запятую в набор строк
ALIST ZLS$TEXT,                             -- Список
ADELIMETER ZLS$TEXT = ','                   -- Разделитель
) returns (
AITEM ZLS$TEXT                              -- Результат
) as
declare P integer;
begin
  while (1 > 0)
  do  begin
        P = position( ADELIMETER, ALIST);
        if (P > 0)
           then begin
                  AITEM = substring( ALIST from 1 for P -1);
                  ALIST = substring( ALIST from P + 1 for char_length(ALIST));
                  suspend;
                end
           else begin
                 AITEM = ALIST;
                 suspend;
                 break;
                end
      end
end
^

grant execute on procedure ZLS$LIST_TO_ROWS to PUBLIC
^
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340672
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minkusinner join (select id from sp_split(
Я так и думал. Статьи о вызове ХП не читаны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340673
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minkus,

жесть. Несколько вопросов, которые помогут тебе оптимизировать запрос:

1. не понял на фига тут подзапросы накручены, когда можно было простым join обойтись?
2. почему вот это условие не where Sp.Ct_Goodsid = :Goodsid_In?
3. зачем процедуру в derived table засунул?
4. Засовывать подзапросы в условие соединения не надо
5. Sp_Get_Flagvalue лучше выполнять один раз вместо двух

Код: 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.
SELECT
    J.DOCID,
    D.DATA,
    D.DT,
    DT_CUST.NAME AS DTNAME,
    D.CT,
    CT_CUST.NAME AS CTNAME,
    D.DOCTYPEID,
    TS_DOCTYPES.TITLE AS DOCTYPENAME,
    D.CREATED_BY,
    TS_USERS.FULL_NAME AS CREATED_USER,
    D.CREATED_DATE,
    J.GOODSID,
    G.TITLE,
    J.QTY,
    J.PRICE * D.RATE / D.RATEUSD PRICE,
    J.SUMA * D.RATE / D.RATEUSD J_SUMA,
    D.FLAGS,
    D.SUMA,
    D.RATEUSD,
    D.DTDEP,
    STOC_DT.TITLE AS DTDEP_NAME,
    D.CTDEP,
    STOC_CT.TITLE AS CTDEP_NAME
FROM
    SP_SPLIT('5213,10103,12057,25527,27268,36452,66468,72699,92485,123025,211667,212049,218482,221355,222075') CC
    JOIN TDB_DOCS D  ON D.DT = CC.ID
    JOIN TDB_JURNAL J  ON J.DOCID = D.DOCID
    JOIN TS_GOODS G ON G.GOODSID = J.GOODSID
    JOIN TS_STOCKS STOC_DT ON STOC_DT.STOCKID = D.DTDEP
    JOIN TS_STOCKS STOC_CT ON STOC_CT.STOCKID = D.CTDEP
    JOIN TS_DOCTYPES ON TS_DOCTYPES.DOCTYPEID = D.DOCTYPEID
    JOIN TS_USERS ON TS_USERS.USERID = D.CREATED_BY
    JOIN TS_CUSTOMER DT_CUST ON DT_CUST.CUSTOMERID = D.DT /* Здесь возможно LEFT JOIN если D.DT может быть NULL */
    JOIN TS_CUSTOMER CT_CUST ON DT_CUST.CUSTOMERID = D.CT /* Здесь возможно LEFT JOIN если D.CT может быть NULL */
    LEFT JOIN SP_GET_FLAGVALUE(D.DOCTYPEID) FL ON 1=1
WHERE  J.GOODSID = :GOODSID_IN AND
       (GET_FLAG_VALUE(FL.FLAGVALUE, 5) = 1 OR GET_FLAG_VALUE(FL.FLAGVALUE, 3) = 1)



тут только первая половина запроса. То что у тебя после UNION ALL мне переделывать лень
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39340677
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

вот тут ошибка
Код: sql
1.
JOIN TS_CUSTOMER CT_CUST ON DT_CUST.CUSTOMERID = D.CT /* Здесь возможно LEFT JOIN если D.CT может быть NULL */


должно быть
Код: sql
1.
JOIN TS_CUSTOMER CT_CUST ON СT_CUST.CUSTOMERID = D.CT /* Здесь возможно LEFT JOIN если D.CT может быть NULL */
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39341202
Minkus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, помогло!
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39341323
Minkus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Где статьи про вызовы ХП прочитать ?
...
Рейтинг: 0 / 0
Тормоза в FB 3 при использовании процедуры List_to_rows
    #39341416
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinkusГде статьи про вызовы ХП прочитать ?
На ibase.ru.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Тормоза в FB 3 при использовании процедуры List_to_rows
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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