Interface и View

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

Ядро системы сортирует данные по имеющимся индексам.
Любая операция над набором данных во View (фильтрация, сортировка)
при невозможности найти подходящий индекс запускает эту внешнюю выгрузку.

В данном случае упомянутые таблицы участвуют в подцепке, система им подобрала соотвествующие индексы(в которых нет поля NRec). При попытке сортировать по NRec что делать системе ? Переключиться на индекс с NRec - сломается подцепка. Остается выгрузить и отсортировать(100% table scan - вот отсюда и тормоза)
Другое дело, что MS SQL такие вещи делает втихую, а вот у нас имеют место быть ругательства системы.
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

2 Alexander
А вот если бы сразу привели весь полный код вью, то помогли бы Вам значительно раньше :-)
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

Alexander писал(а):Внешняя выгрузка все равно производится, как с этим бороться??
1. не использовать order by пока не разберешься как в галактике запросы работают. когда разберешься - тоже скорее всего order by тебе уже не понадобится

2. использовать существующие индексы в таблицах для сортировки. при отсутствии таковых идти разбираться как работают временные таблицы

вариант третий, дополнительный и самый правильный: подумай, а точно ли нужна там такая сортировка. бывает, что силы, потраченные на это неадекватны поставленной задаче
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Понятно, Спасибо!
Еще вопрос возник: Как можно сделать объединение, т.е.
Запрос:

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

select katsopr.SUMMA,
       katsopr.svnalogs,
       katsopr.name,
       katorg.name,
       addsumtune.name,
       katstroy.name,
       spsopr.dsopr
                    from katsopr,
                    katorg, 
                    addsumtune,
                    katstroy, 
                    spsopr
                            where ((
                                katsopr.corg == katorg.nrec and
                                spsopr.nrec == speczatr.CSPEC and
                                speczatr.CADDSUMTUNE == addsumtune.nrec and
                                spsopr.csopr == katsopr.nrec     and
                                katstroy.nrec == spsopr.cuks  and
                                111 == spsopr.vidsopr
                            ));
каким образом в этом запросе можно сделать выборку и по

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

110 == spsopr.vidsopr
???
И Можно ли вообще???
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

Самым простым - запихать первой строчкой в подцепку :-)
И нормализовать последовательность подцепки таблиц - а то в примере сущий бардак 8-)

В случае 1 значения Vidsopr
<значение vidsopr> == Katsopr.vidsopr
katsopr.corg == katorg.nrec and
katsopr.nrec == spsopr.csopr and
spsopr.nrec == speczatr.CSPEC and
speczatr.CADDSUMTUNE == addsumtune.nrec and
spsopr.cuks == katstroy.nrec

либо вынести ограничение по vidsopr за скобки подцепки и сделать фильтром нескольким значениям (по vidsopr есть несколько индексов, так что отработаться должно быстро)

Жирным - то, где напутано было в последовательности полей в подцепке.
Управляющее поле в подцепке всегда перед знаком подцепки :-)

Представьте себе View в виде дерева и последовательно описывайте по очереди ограничения на ветки (таблицы в нашем случае), опускаясь все ниже и ниже по уровню подцепки. Можете описать сначала по одной ветке сверху вниз подцепку, затем по второй и т.д. Можете по каждой ветке уровни последовательно на одном и том же уровне описывать. Но никогда не описывайте подцепку самых нижних таблиц перед описанием подцепки верхних таблиц, находящихся с ними в одной ветке запроса.
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

И нормализовать последовательность подцепки таблиц - а то в примере сущий бардак
так вот господа, не поверите. давеща посещал курсы в корпорации в москве так вот так учат (!!!), что писать в подцепке можно и нужно в беспорядке, дескать компилятор умный и сам подберет индексы какие можно и нужно. волосы дыбом ставали...
прямо такой бедлам в методичках и пишут.

а насчет 110 и 111 то проще всего так

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

Create view 
 Var TypeSopr : word
as select * from SpSopr
where
((
      TypeSopr == SpSopr.VidSopr
and <tratatata>
))
;

procedure Work
{
// Заполняем временные таблицы - или что таи надо еще сделать
}

HandleEvent
cmInit:
 { 
  TypeSopr := 110; Work;
  TypeSopr := 111; Work;

// ну и делаем дальше что нужно
 }
dP
Marya
Сообщения: 1
Зарегистрирован: 30 ноя 2006, 19:53
Откуда: Москва

Сообщение Marya »

To DP: ну, во-первых, в методичке таких слов нет (сама недавно обучилась :smile: );
а во-вторых, по моему опыту и убеждению, порядок перечисления подцепок никакого значения не имеет (от разработчиков тоже это слышала)... Сможете доказать обратное - буду благодарна...
Последний раз редактировалось Marya 30 ноя 2006, 20:53, всего редактировалось 2 раза.
qip
Сообщения: 2
Зарегистрирован: 30 ноя 2006, 20:25
Откуда: Поволжье

Сообщение qip »

ух, ты интересная тема! :-) Я тут впервые, не судите строго... :???:
dp писал(а): дескать компилятор умный и сам подберет индексы какие можно и нужно. волосы дыбом ставали...
Дико извиняюсь :-) , конечно, но ведь он и правда подбирает индексы!!! Я не прав?
------------------------

QIP - Rulez!
kmr
Сообщения: 3
Зарегистрирован: 30 ноя 2006, 23:41

Сообщение kmr »

Добрый день, уважаемые! Пришлось "засветиться" ради такого случая.. :smile:
Правда, повод не очень приятный...

Павел (dp), у меня к Вам один только вопрос, риторический:
что ж Вы мне в лицо-то свое мнение не высказали?
Спасибо Вам за преподанный урок... :smile:

Желаю всем успехов, ребята! Когда-нибудь приду сюда еще... :smile:
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Ну насчет того что можно писать в беспорядке ...вообщем можно, конечно. Но все же более логично наглядно описывать секцию where ((...))
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

2 kmr
Раз Вы преподаватель на учебных курсах (по всей видимости...), Вы бы и помогали местному люду в решении различного рода проблем при программмировании на Атлантисе. Мы же не все уразумеем ... :-)
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Den
ты такой интересный. делать ему больше нечего.

Учить - его хлеб, а ты предлагаешь делать это здесь, на форуме, бесплатно! Оригинал. :cool:
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

В документации написано, что порядо подцепок не имеет значения... Сомнительно, но факт!
На счет временной таблицы - это понятно, мне было интересно: можно ли одним запросом сделать... Значит Нельзя...
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Каким образом можно Получить модуль, в котором нахожусь?
Сбыт и т.п??
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Алексей писал(а):Den
Учить - его хлеб, а ты предлагаешь делать это здесь, на форуме, бесплатно! Оригинал. :cool:
Тем не менее, есть ребята (разработчики), которые, не менее загружены работой. И тем не менее оказывают посильную помощь в решении возникших проблем. Хотя конечно, это дело каждого )
Ответить