Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

В какую сторону можно оптимизировать запрос?   Найти похожие ветки 

 
Sergey13 ©   (2004-12-30 10:25) [40]

Мое ИМХО - подзапросы (в том же Оракле) и ХП (возвращающие НД) в ИБ - это практически одно и то-же. Я даже думаю, что часто в ИБ использование ХП - это просто способ обойти отсутствие подзапросов. Вот вроде в ФБ2 обещают поддержку подзапросов, к чему бы это?
Кроме того сами по себе много мелких запросов не всегда дают нужный результат - их результаты надо еще объединить - а это уже интересная (как минимум) задача.
Хотя конечно в каждом конкретном случае - конкретное решение.


 
Danilka ©   (2004-12-30 10:29) [41]

Боюсь, что через какое-то время могут вылезти нехилые тормоза - ты рассчитываешь обороты на лету, с начала времен и по заданную дату. С каждым месяцем запрос все тяжелее и тяжелее будет отрабатываться.
На мой взгляд, самый лучший вариант сделать отдельную таблицу, в которой хранить обороты и сальдо за месяц. Например, у нас это сделано ввиде отдельной операции у клиента, кроме того, есть опарация "закрытие месяца", которая также ее пересчитывает, и больше за этот месяц никакие документы крячиться не могут. Чтобы что-то исправить - можно его заново открыть. Можно открыть только последний закрытый месяц, и закрыть только первый открытый. Все в бухгалтерии довольны и счастливы. :))

И еще, в Орокле вместо CASE можно использовать DECODE, на мой взгляд намного нагляднее и удобнее. :))


 
k2 ©   (2004-12-30 10:45) [42]

to Danilka ©   (30.12.04 10:29) [41]
в книжке Мишра/Бьюли "Секреты Oracle SQL" рекомендуют таки case использовать (у нас 9.2) "Выражения CASE выполняются быстрее чем DECODE. Так как case встроено в грамматику, нет необходимости в вызове функции для оценки логики if-then-else. Для одного вызова разница во времени исполнения будет мизерной, но при работе с большими множествами суммарная экономия времени на вызове функции станет значительной."


 
Danilka ©   (2004-12-30 10:50) [43]

[42] k2 ©   (30.12.04 10:45)
Понятно, спасибо, буду теперь знать, а то у меня этих декодов много. :)


 
Sandman25 ©   (2004-12-30 11:04) [44]

cnt03cnt10.cnt10_id = 882 OR cnt03cnt10.cnt10_id = 883 можно заменить на
cnt03cnt10.cnt10_id in [882,883]


 
k2 ©   (2004-12-30 11:09) [45]

Sandman25 ©   (30.12.04 11:04) [44]
спасибо, и от deb/cr избавилась


 
Danilka ©   (2004-12-30 11:35) [46]

[45] k2 ©   (30.12.04 11:09)
разнесла на два разных поля val_int_deb и val_int_cr? Тогда сразу и SUM (val_int_deb - val_int_cr) sum_val стоит сделать по-моему.


 
Sergey13 ©   (2004-12-30 11:46) [47]

2[44] Sandman25 ©   (30.12.04 11:04)
Скорее всего оптимизатор все равно переделает на OR. ИМХО.


 
k2 ©   (2004-12-30 11:48) [48]

Danilka ©   (30.12.04 11:35) [46]
если чесно больше всего мне не нравится union, ведь шерстятся одни и те же таблицы два раза с разницей в одно малюсенькое условие :( ..


 
Sandman25 ©   (2004-12-30 12:15) [49]

[47] Sergey13 ©   (30.12.04 11:46)

Возможно. Но хотя бы читабельность останется.


 
Sandman25 ©   (2004-12-30 12:18) [50]

[48] k2 ©   (30.12.04 11:48)

AND (props.crec_cd_pk = contr.pk or props.crec_db_pk = contr.pk)
ну и изменить извлекаемые поля, конечно


 
Petr V. Abramov ©   (2004-12-30 12:57) [51]

> Мое ИМХО - подзапросы (в том же Оракле) и ХП (возвращающие НД)
> в ИБ - это практически одно и то-же. Я даже думаю, что часто в
> ИБ использование ХП - это просто способ обойти отсутствие
> подзапросов
 И я, и я того же мнения



Страницы: 1 2 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.027 c
1-1106567184
Weare
2005-01-24 14:46
2005.02.06
Почта и Делфи


1-1106403052
Avi
2005-01-22 17:10
2005.02.06
Взлом программы.


1-1106242623
Mr_Jack
2005-01-20 20:37
2005.02.06
объект Tmemo


4-1103434952
DelphiN!
2004-12-19 08:42
2005.02.06
Передача параметров потоковой процедуры


3-1104996289
atruhin
2005-01-06 10:24
2005.02.06
Переход от IB 5.6 на FireBird 1.5