Interface и View
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Ядро системы сортирует данные по имеющимся индексам.
Любая операция над набором данных во View (фильтрация, сортировка)
при невозможности найти подходящий индекс запускает эту внешнюю выгрузку.
В данном случае упомянутые таблицы участвуют в подцепке, система им подобрала соотвествующие индексы(в которых нет поля NRec). При попытке сортировать по NRec что делать системе ? Переключиться на индекс с NRec - сломается подцепка. Остается выгрузить и отсортировать(100% table scan - вот отсюда и тормоза)
Другое дело, что MS SQL такие вещи делает втихую, а вот у нас имеют место быть ругательства системы.
Любая операция над набором данных во View (фильтрация, сортировка)
при невозможности найти подходящий индекс запускает эту внешнюю выгрузку.
В данном случае упомянутые таблицы участвуют в подцепке, система им подобрала соотвествующие индексы(в которых нет поля NRec). При попытке сортировать по NRec что делать системе ? Переключиться на индекс с NRec - сломается подцепка. Остается выгрузить и отсортировать(100% table scan - вот отсюда и тормоза)
Другое дело, что MS SQL такие вещи делает втихую, а вот у нас имеют место быть ругательства системы.
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
1. не использовать order by пока не разберешься как в галактике запросы работают. когда разберешься - тоже скорее всего order by тебе уже не понадобитсяAlexander писал(а):Внешняя выгрузка все равно производится, как с этим бороться??
2. использовать существующие индексы в таблицах для сортировки. при отсутствии таковых идти разбираться как работают временные таблицы
вариант третий, дополнительный и самый правильный: подумай, а точно ли нужна там такая сортировка. бывает, что силы, потраченные на это неадекватны поставленной задаче
Понятно, Спасибо!
Еще вопрос возник: Как можно сделать объединение, т.е.
Запрос:
каким образом в этом запросе можно сделать выборку и по
???
И Можно ли вообще???
Еще вопрос возник: Как можно сделать объединение, т.е.
Запрос:
Код: Выделить всё
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
И Можно ли вообще???
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Самым простым - запихать первой строчкой в подцепку 
И нормализовать последовательность подцепки таблиц - а то в примере сущий бардак
В случае 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 в виде дерева и последовательно описывайте по очереди ограничения на ветки (таблицы в нашем случае), опускаясь все ниже и ниже по уровню подцепки. Можете описать сначала по одной ветке сверху вниз подцепку, затем по второй и т.д. Можете по каждой ветке уровни последовательно на одном и том же уровне описывать. Но никогда не описывайте подцепку самых нижних таблиц перед описанием подцепки верхних таблиц, находящихся с ними в одной ветке запроса.

И нормализовать последовательность подцепки таблиц - а то в примере сущий бардак

В случае 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 !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
-
- Местный житель
- Сообщения: 216
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Беларусь, Минск
- Контактная информация:
так вот господа, не поверите. давеща посещал курсы в корпорации в москве так вот так учат (!!!), что писать в подцепке можно и нужно в беспорядке, дескать компилятор умный и сам подберет индексы какие можно и нужно. волосы дыбом ставали...И нормализовать последовательность подцепки таблиц - а то в примере сущий бардак
прямо такой бедлам в методичках и пишут.
а насчет 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
To DP: ну, во-первых, в методичке таких слов нет (сама недавно обучилась
);
а во-вторых, по моему опыту и убеждению, порядок перечисления подцепок никакого значения не имеет (от разработчиков тоже это слышала)... Сможете доказать обратное - буду благодарна...

а во-вторых, по моему опыту и убеждению, порядок перечисления подцепок никакого значения не имеет (от разработчиков тоже это слышала)... Сможете доказать обратное - буду благодарна...
Последний раз редактировалось Marya 30 ноя 2006, 20:53, всего редактировалось 2 раза.
Добрый день, уважаемые! Пришлось "засветиться" ради такого случая.. 
Правда, повод не очень приятный...
Павел (dp), у меня к Вам один только вопрос, риторический:
что ж Вы мне в лицо-то свое мнение не высказали?
Спасибо Вам за преподанный урок...
Желаю всем успехов, ребята! Когда-нибудь приду сюда еще...

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

Желаю всем успехов, ребята! Когда-нибудь приду сюда еще...
