![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос выполняется непонятно как... [D7, MSSQL]
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 выполнять пробовали ?