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

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

SQL запрос выполняется непонятно как... [D7, MSSQL]


Страницы:   1 2

Max Zyuzin ©   (2005-11-14 14:33:00) 

Приветствую!
Проблема тут появилась есть View вот примерно такого вида...
Извиняюсь за его длинну...
BillsView

SELECT     dbo.Bills.bBillDate, dbo.Bills.bBillNumber, dbo.Bills.bShipmentBillNumber, dbo.Bills.bEnumerationBillNumber, dbo.Bills.bInvoiceBillNumber,
                     dbo.Bills.bCodeAgreement, dbo.Bills.bShipmentSum, dbo.CodeAgreement.caConfirmedSum,
                         (SELECT     SUM(BillsEnumeration.beSumNoTax)
                           FROM          BillsEnumeration
                           WHERE      beBillNumber = bBillNumber AND beBillDate = bBillDate AND beBillStation = bBillStationCode) AS BillsEnumerationSumNoTax,
                         (SELECT     SUM(BillsEnumeration.beSumTax)
                           FROM          BillsEnumeration
                           WHERE      beBillNumber = bBillNumber AND beBillDate = bBillDate AND beBillStation = bBillStationCode) AS BillsEnumerationSumTax,
                         (SELECT     SUM(BillsEnumeration.beSumNoTax) + SUM(BillsEnumeration.beSumTax)
                           FROM          BillsEnumeration
                           WHERE      beBillNumber = bBillNumber AND beBillDate = bBillDate AND beBillStation = bBillStationCode) AS BillsEnumerationSumTotal,
                         (SELECT     SUM(biInvoiceSumNoTax)
                           FROM          BillsInvoice
                           WHERE      biBillNumber = bBillNumber AND biBillDate = bBillDate AND biBillStation = bBillStationCode) AS BillsInvoiceSumNoTax,
                         (SELECT     SUM(biInvoiceSumTax)
                           FROM          BillsInvoice
                           WHERE      biBillNumber = bBillNumber AND biBillDate = bBillDate AND biBillStation = bBillStationCode) AS BillsInvoiceSumTax,
                         (SELECT     SUM(biInvoiceSumNoTax) + SUM(biInvoiceSumTax)
                           FROM          BillsInvoice
                           WHERE      biBillNumber = bBillNumber AND biBillDate = bBillDate AND biBillStation = bBillStationCode) AS BillsInvoiceSumTotal
FROM         dbo.Bills LEFT OUTER JOIN
                     dbo.NSIStation ON dbo.Bills.bBillStationCode = dbo.NSIStation.sNSICode LEFT OUTER JOIN
                     dbo.CodeAgreement ON dbo.Bills.bCodeAgreement = dbo.CodeAgreement.caCode

Вот в обчем если его запустить через QA оно выбирает порядка 30000 записей за 3-4 секунды,
если эту же муть выбирать из программы запросом вида
select * from BillsView where bBillDate between :fd and :tdто записи за месяц (5-6 тысяч) выбираются порядка 20 сек :(... как с этим бороться?
Содинение через ADO... провайдер Microsoft OLE DB... запрос выполняется через TADOQuery (не кидайтесь помидорами).
Курсор статический.


Nikolay M.   (2005-11-14 15:22:00) [21]


> надо переделывать на процедуру или функцию, чтобы параметры
> работали

Необязательно, в данном случае параметры уйдут внутрь селекта, так что причина, скорее всего, в другом.
А если попробовать селект без параметров исполнить в QA и в Дельфях?


sniknik   (2005-11-14 15:05:00) [22]

да еще, QA работает с серверным курсором, со всеми из этого вытекающими последствиями.


sniknik   (2005-11-14 15:02:00) [23]

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

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


ANB   (2005-11-14 14:49:00) [24]


> select * from BillsView where bBillDate between :fd and
> :td

А сей запрос из QA выполнять пробовали ?


Страницы:   1 2

Наверх

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