[ТЕМА ЗАКРЫТА]
Опции темы
07.10.2010 10:23  
undos
запрос:

SELECT DISTINCT *
FROM (SELECT i.NAME, 'р/с: ' || bank.account || CHR (13) || i.commentary AS RS , i.ident AS ID, doc.createdat,
s.supplierdoc || CHR (13) || s.ID AS num, doc.totalsum,
(SELECT SUM (spvat.taxsum)
FROM supermag.svspecvatwi spvat
WHERE spvat.doctype = doc.doctype
AND spvat.docid = doc.ID) AS nds,
CASE
WHEN s.paymentdelay = 0
THEN sup.paymentdelay
WHEN s.paymentdelay <> 0
THEN s.paymentdelay
END AS d
FROM SMClientBanks bank,
smwaybillsin s,
smdocuments doc,
smclientinfo i,
smsuppliers sup
WHERE bank.idclient(+) = i.id
AND s.ID = doc.ID
AND doc.clientindex = i.ID
AND doc.doctype = 'WI'
AND doc.docstate = 3
AND sup.ID = i.ID
AND bank.isactual = 1
order by i.ident
)
WHERE createdat + d BETWEEN TO_DATE ('20101004', 'YYYYMMDD')
AND TO_DATE ('20101007', 'YYYYMMDD')
AND d <> 0

загружает ЦП процессом oracle.exe на 50% и выполняется не менее 20 минут, посоветуйте, что изменить в нем, чтобы увеличить производительность
 
07.10.2010 10:56  
John Doe
с такими вопросами принято выкладывать план запроса.
думается, где-то фулскан валит...
 
07.10.2010 10:58  
undos
------------------------------------------------------------

Statement Id=4203172 Type=
Cost=2,64018716311899E-308 TimeStamp=07-10-10::09::58:04

(1) SELECT STATEMENT CHOOSE
Est. Rows: 1 Cost: 335
(15) SORT UNIQUE
Est. Rows: 1 Cost: 335
(14) VIEW (Embedded SQL)
Est. Rows: 1 Cost: 317
(13) SORT ORDER BY
Est. Rows: 1 Cost: 317
(12) NESTED LOOPS
Est. Rows: 1 Cost: 298
(10) NESTED LOOPS
Est. Rows: 1 Cost: 237
(7) HASH JOIN
Est. Rows: 1 Cost: 236
(5) NESTED LOOPS
Est. Rows: 46 Cost: 19
(2) TABLE ACCESS FULL SUPERMAG.SMCLIENTBANKS [Analyzed]
(2) Blocks: 27 Est. Rows: 46 of 4589 Cost: 5
Tablespace: USERS
(4) TABLE ACCESS BY INDEX ROWID SUPERMAG.SMCLIENTINFO [Analyzed]
(4) Blocks: 120 Est. Rows: 4580 of 4580 Cost: 1
Tablespace: USERS
(3) UNIQUE INDEX RANGE SCAN SUPERMAG.SMCCLIENTINFO_PK [Analyzed]
Est. Rows: 4580
(6) TABLE ACCESS FULL SUPERMAG.SMDOCUMENTS [Analyzed]
(6) Blocks: 1417 Est. Rows: 114 of 125257 Cost: 216
Tablespace: USERS
(9) TABLE ACCESS BY INDEX ROWID SUPERMAG.SMSUPPLIERS [Analyzed]
(9) Blocks: 42 Est. Rows: 4462 of 4462 Cost: 1
Tablespace: USERS
(8) UNIQUE INDEX RANGE SCAN SUPERMAG.SMCSUPPLIERS_PK [Analyzed]
Est. Rows: 4462
(11) TABLE ACCESS FULL SUPERMAG.SMWAYBILLSIN [Analyzed]
(11) Blocks: 395 Est. Rows: 60932 of 60932 Cost: 61
Tablespace: USERS
 
07.10.2010 11:05  
John Doe
Цитата:
WHERE createdat + d
перенеси + d в правую часть условия, как минимум
 
07.10.2010 11:06  
undos
в смысле WHERE createdat BETWEEN TO_DATE ('20101004', 'YYYYMMDD') AND TO_DATE ('20101007', 'YYYYMMDD') + d ?
 
07.10.2010 11:08  
John Doe
Если тебя это изменившееся условие устроит, то да.
 
07.10.2010 11:14  
undos
условие такое не подходит ( надо чтобы createdat + d
 
07.10.2010 11:18  
John Doe
Тогда сделай функциональный индекс что ли...
 
07.10.2010 11:20  
undos
подскажи как
 
07.10.2010 11:25  
Mtirt
наверное условие будет такое, нет?

WHERE createdat BETWEEN TO_DATE ('20101004', 'YYYYMMDD')-d AND TO_DATE ('20101007', 'YYYYMMDD') - d
 
 


Опции темы



Часовой пояс GMT +3, время: 19:25.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.