Страница 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 (компилятор ругнется). Помоему, когда то видел ПИР на эту тему. Но , наверное, так не сделан он пока.