Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по SQL и Interbase. [D4, D5, IB5.x, ]


Страницы:   1 2

VL ©   (2001-12-27 10:49:00) 

Знатоки, может кто знает как решить проблему.
Посылается на сервер запрос
select * from <TABLE>
left join .....
left join .....
left join .....
where <......>
сей запрос считается 7 секунд.
Если вместо * указать sum(...), то он считается 30 сек.
Я, может по незнанию считал, что сумма должна считаться быстрее чем общая выборка.
Если возможность ускорить получение ответа по просчету.


Romkin   (2001-12-27 12:37:00) [21]

Кошмар!! никогда не используй SP для join.
Какие поля кому принадлежат?? алиасы бы подписал...


Romkin   (2001-12-27 12:35:00) [22]

Откуда ); ??
left join пишутся в скобках:
((a left join b on...) left join c on...) left join d on...
щас посмотрю запрос


VL   (2001-12-27 12:31:00) [23]

select otinlnwarecode,sum(resultvalue*otinlncount*(1-otindiscount/100)*1.2),sum(otinlncount)
from outinvoicereestr
left join firmingroupe(otinfirmcode,:p0) on 1=1");
left join outinvoicelines on otinlndocmcode=otincode");
left join vlwareinclass(otinlnwarecode,:p1) on 1=1");
left join convertmoney(otinlnprice,otincrnccode,1,otindate) on 1=1
where otindate>="01.12.2001" and otindate<="31.12.2001" and rvlwareinclass=1 and rfirmingroupe=1
group by otinlnwarecode

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

проверка на принадлежность к диапазону дат, принадлежность товара к категории, принадлежность фирмы к группе.


Romkin   (2001-12-27 11:59:00) [24]

Это и есть select SP - которая выдает набор данных.
Приведи весь запрос, может, что-то не так - обычно при суммировании join не нужен...


VL   (2001-12-27 11:36:00) [25]

Что значит select SP?
Если у меня в left join идет проверка, а надо-ли эти данные сумировать.
Я попытался сделать это в процедуре, используя цикл for, но он тоже считает долго.


Romkin   (2001-12-27 11:25:00) [26]

оформи в виде select SP, в for select убери left join (медленно работает), просто в теле цикла делай селекты как надо, а потом просто
select sum(...) from sp_name(...)
или сразу в процедуре суммируй (Тогда left join точно не нужны)


Alexandr   (2001-12-27 11:13:00) [27]

может есть, но скорее всего нет.
select * ведь просто делает выборку и все (правда, выдает часть выборки на клиента), а select sum должен выбрать все данные, да потом еще и просуммировать


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо