24.09.2007, 09:51 | #1 |
Участник
|
Плохой запрос в форме заказов
Такой запрос вызывается в форме заказов при сортировке строк по номенклатуре:
SELECT /*+ FIRST_ROWS */ a.salesid, a.linenum, a.itemid, a.salesstatus, a.ledgeraccount, a.name, a.externalitemid, a.taxgroup, a.qtyordered, a.salesdelivernow, a.remainsalesphysical, a.remainsalesfinancial, a.costprice, a.salesprice, a.currencycode, a.linepercent, a.linedisc, a.lineamount, a.confirmeddlv, a.reservation, a.salesunit, a.dimension, a.dimension2_, a.dimension3_, a.dimension4_, a.dimension5_, a.priceunit, a.inventtransid, a.custgroup, a.custaccount, a.salesqty, a.salesmarkup, a.inventdelivernow, a.multilndisc, a.multilnpercent, a.salestype, a.blocked, a.complete, a.remaininventphysical, a.transactioncode, a.taxitemgroup, a.del_configid, a.taxautogenerated, a.underdeliverypct, a.overdeliverypct, a.barcode, a.barcodetype, a.inventreftransid, a.inventreftype, a.inventrefid, a.itembomid, a.lineheader, a.scrap, a.returnactionid, a.inventtransidreturn, a.inventdimid, a.transport, a.statprocid, a.estimategross, a.estimatenet, a.port, a.customerlinenum, a.packingunitqty, a.packingunit, a.intercompanyinventtransid, a.modifiedby, a.createddate, a.createdby, a.recid, b.inventdimid, b.inventbatchid, b.inventlocationid, b.recid FROM salesline a, inventdim b WHERE substr(nls_lower(a.salesid), 1, 20) = nls_lower(:in1) AND substr(nls_lower(a.inventdimid), 1, 20) = substr(nls_lower( b.inventdimid), 1, 20) ORDER BY substr(nls_lower(a.itemid), 1, 25) DESC План исполнения: SELECT STATEMENT NESTED LOOPS SALESLINE TABLE ACCESS [BY INDEX ROWID] I_359ITEMIDX INDEX [FULL SCAN DESCENDING] INVENTDIM TABLE ACCESS [BY INDEX ROWID] I_698DIMIDIDX INDEX [UNIQUE SCAN] Используемая БД - Oracle. Если убрать хинт /*+ FIRST_ROWS */, то все становится нормально. В чем может быть причина фуллскана? Причем по ItemIdx, хотя есть SalesItemIdx в который входят SalesId и ItemId? Кто-нибудь с таким сталкивался и как это можно победить? |
|
|
|