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

Жсткая подцепка

Добавлено: 11 авг 2020, 15:12
KVS
Товарищи, добрый день.

Есть две таблы (физические, созданы через create table):
1. Analytic (nRec : comp, Code : string, Name: string) with index (i1 = nRec (surrogate,journal));
2. AnalyticSets (nRec : comp, cAnalyt : ref (table Analytic ), Name: string) with index (i1 = nRec (surrogate,journal), i2 = cAnalyt + Name);

В 1 табле где-то 3к записей, во второй 8к.

Есть вьюха:

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

create view as
select ANK.nRec
from 
  synonym Analytic ANK
, synonym AnalyticSets SETS
where ((
ANK.nRec /==  SETS.cAnalyt  and
'X_300'       ==  SETS.Name
));
В фейсе 1 визуальный элемент - это броуз:

browse brAnk
fields ANK.code; ANK.name;

Так вот фейс открывается за 14 секунд, что очень-очень медленно, и отображает 10 записей.
Вопрос, куда молжно посмотреть, чтобы выяснить что является причиной такой медоенной работы. На стороне SQL Server запрос

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

select ANK.* from ANK inner join SETS on SETS.cAnalyt = ANK.nRec and SETS.Name = 'X_300'  
выполняется за доли секунд...

Re: Жсткая подцепка

Добавлено: 13 авг 2020, 13:08
edward_K
Посмотрите sil лог.скорей всего у вас запрос разделил я на две части и выполняется на все записи в табле слева, да Ещё и в два прогона. Решить это можно добавив уникальность по индексу в. Таблицу справа. К

Re: Жсткая подцепка

Добавлено: 14 авг 2020, 09:06
KVS
Благодарю за ответ.
Действительно, лог показал, что запросы разделились.Есть где-нибудь вопзможность почитать про подобные нюансы работы вьюхи?

Re: Жсткая подцепка

Добавлено: 14 авг 2020, 10:37
edward_K
Боюсь что нигде.
Тут проблема в том что Атлантис преобразует ваш запрос как хочет и без dsql заставить его идти по другому пути сложно но можно - уникальность индексов, вложенные запросы, view на серверы и так далее.
Я надеялся что join во from сработает по другому, но нет.
В общем самое быстрое в вашем случае будет селект во временную таблицу, возможно поменяв их местами.
Можете ещё попробовать на 5.5.35.6 драйвере.

Re: Жсткая подцепка

Добавлено: 14 авг 2020, 12:31
Den
Жесткая подцепка порой непредсказуема в атлантисе. Лучше во времянку из Analytic сразу выгрести dsql записи и от них уже пострить вью без жесткой подцепки
А вообще у меня вот так :

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

Interface TestJ;

create view
  select
  *
    from katorg k join basedoc b
    where (( k.nrec /== b.corg and 101==b.viddoc))
  ;

Browse Brw1;
  table k;
   fields
    k.name 'name'   : [50],protect;
end;

end.
мгонвенно отображается. (в katorg 1К записей, в basedoc 5К записей, )

Re: Жсткая подцепка

Добавлено: 17 авг 2020, 12:27
KVS
Спасибо за ответы. Собственно, пришлось через временную таблицу сделать: dsql с выборкой nRec'ов, результат во времянку, к ней жесткая подцепка соновной таблы. Работает быстро.
Тут проблема в том что Атлантис преобразует ваш запрос как хочет и без dsql заставить его идти по другому пути сложно но можно - уникальность индексов, вложенные запросы, view на серверы и так далее.
Можно как-то создать вьюху на сервере и обращаться к ней посредством вьюхи в випе без обвязки с использованием табличных объектов?
Я так понимаю, что во вьюхе в VIPе доступны только таблицы, которые описаны в словаре или в текущем проекте.

Re: Жсткая подцепка

Добавлено: 18 авг 2020, 10:40
edward_K
KVS писал(а): Можно как-то создать вьюху на сервере и обращаться к ней посредством вьюхи в випе без обвязки с использованием табличных объектов?
Я так понимаю, что во вьюхе в VIPе доступны только таблицы, которые описаны в словаре или в текущем проекте.
Я сам не пробовал. но вот какие у меня есть примеры
В сапорте

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

/* создадим заглушку View */

sql
create view TNB_EnsurReplPodr
(
  SrcNrec,
  SrcKod,
  SrcName,
  DstNrec,
  DstKod,
  DstName
)
as

select KatPodrSrc.NREC as SrcNrec,
       KatPodrSrc.KOD  as SrcKod,
       KatPodrSrc.NAME as SrcName,
       KatPodrDst.NREC as DstNrec,
       KatPodrDst.kod  as DstKod,
       KatPodrDst.NAME as DstName
from
  KatPodr KatPodrDst
, KatPodr KatPodrSrc
where
(
  KatPodrDst.NRec = KatPodrSrc.Nrec
)
;
На сервере( это под оракл)

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

alter session set current_schema="GAL810"
/

create or replace view S$TNB_EnsurReplPodr as

select KatPodrSrc.FNREC as SrcNrec, 
       KatPodrSrc.FKOD  as SrcKod, 
       KatPodrSrc.FNAME as SrcName, 
       KatPodrDst.FNREC as DstNrec,
       KatPodrDst.Fkod  as DstKod,
       KatPodrDst.FNAME as DstName
from
  KatPodr KatPodrDst
, KatPodr KatPodrSrc
, (
......
После этого говорят можно обращаться к TNB_EnsurReplPodr как к обычной таблице.

Re: Жсткая подцепка

Добавлено: 18 авг 2020, 11:52
KVS
Хммм... Спасибо, буду пробовать.

Подобным образом с вьюхами на стороне сервера я уже работал, однако в VIPе обращался с ними только при помощи iQuery + времянка для выгрузки.

Re: Жсткая подцепка

Добавлено: 18 авг 2020, 12:02
Den
Полагаю, на данный момент только из dsql и можно работать с view серверными.
в LOT нельзя объявить такое в секции from (компилятор ругнется). Помоему, когда то видел ПИР на эту тему. Но , наверное, так не сделан он пока.