powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Медленно работает запрос
11 сообщений из 11, страница 1 из 1
Медленно работает запрос
    #32088827
Фотография Gooddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос на выборку и сортировку данных работает медленно. В init файле есть параметры SORT_AREA_RETAINED_SIZE и SORT_AREA_SIZE. Если их размер увеличить будет ли запрос работать быстрее??? И какие их размеры надо устанавливать????
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32088832
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, и будет. Запрос, структуру таблиц и данные - в студию. Текущее значение этих параметров - туда же. Analyze давно делался? Индексы все на месте? Медленно работает только с сортировкой или и без неё тоже медленно?\r
\r
Я, кстати, тут ссылочку на статейку по теме кидал вчера, почитай - /topic/19735
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32088904
Фотография Gooddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ссылка не работает.
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32088933
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня работает. Еще раз -
http://www.orapub.com/cgi/genesis.cgi?p1=sub&p2=abs145
Статья "Cost-Based Optimizer Problems and Solutions"
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32091959
Фотография Gooddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если меняю в запросе

where (batch.mtl_kind_oid, batch.phys_form_oid,
batch.chem_form_oid,
batch.irrad_pur_oid) in
(select nc.mtl_kind_oid, nc.phys_form_oid,
nc.chem_form_oid,
nc.irrad_pur_oid from nomen_cmpo)

на

AND nc.mtl_kind_oid = batch.mtl_kind_oid
AND nc.phys_form_oid = batch.phys_form_oid
AND nc.chem_form_oid = batch.chem_form_oid
AND nc.irrad_pur_oid = batch.irrad_pur_oid

то но работаетна много быстрее. Почему????
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32092150
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддерживаю Scott Tiger:

Запрос, структуру таблиц и данные - в студию. Текущее значение этих параметров - туда же. Analyze давно делался? Индексы все на месте? Медленно работает только с сортировкой или и без неё тоже медленно?

Кстати и индексы тудаже!


Или эта информация секретна?
(если так, то можно дать лишь общие рекомендации)
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32092418
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Gooddy: потому что конструкции типа <query> where smth in|not in <subquery> работают по жизни медленно. Пользуйся exists|not exists. В качестве домашнего задания - показать, почему так происходит, это не сложно.
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32093479
Фотография Gooddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот оба запроса

SELECT n.name_mtl, n.enrich_descr, n.sort_id, nc.enrich_descr, prg.OID,
batch.mtl_kind_oid, batch.phys_form_oid, batch.chem_form_oid,
batch.irrad_pur_oid, prd.end_prd_dt,
SUM (
DECODE (
typ.elem_unit,
'кг', mtl.elem_mass,
'г', mtl.elem_mass * 0.001
)
)
sum_elem_mass,
DECODE (
typ.elem_unit,
'кг', 'кг', 'г', 'кг'
)
elem_unit
FROM nomen n,
nomen_cmpo nc,
cd_prg prg,
ac_batch batch,
ac_mtl mtl,
mtl_typ typ,
prd,
inv
WHERE
batch.mtl_kind_oid = nc.mtl_kind_oid
AND batch.phys_form_oid = nc.phys_form_oid
AND batch.chem_form_oid = nc.chem_form_oid
AND batch.irrad_pur_oid = nc.irrad_pur_oid
AND check_pct (
batch.enrichmnt,
nc.down_sign,
nc.up_sign,
nc.down_pct,
nc.up_pct
) IS NULL
AND nc.nomen_oid = n.OID
AND batch.cd_prg_oid = prg.OID
AND mtl.ac_batch_oid = batch.OID
AND mtl.mtl_typ_oid = typ.OID
AND batch.inv_oid = inv.OID
AND inv.mba_oid IN (SELECT OID
FROM mba
WHERE code = 'ОЗО')
AND inv.prd_oid = prd.OID
AND inv.prd_oid IN (SELECT prd.OID
FROM prd
WHERE TO_CHAR (prd.end_prd_dt, 'DD.MM') = '31.12')
GROUP BY prg.OID,
n.name_mtl,
n.enrich_descr,
n.sort_id,
nc.enrich_descr,
batch.mtl_kind_oid,
batch.phys_form_oid,
batch.chem_form_oid,
batch.irrad_pur_oid,
prd.end_prd_dt,
typ.elem_unit;





SELECT n.name_mtl, n.enrich_descr, n.sort_id, nc.enrich_descr, prg.OID,
batch.mtl_kind_oid, batch.phys_form_oid, batch.chem_form_oid,
batch.irrad_pur_oid, prd.end_prd_dt,
SUM (
DECODE (
typ.elem_unit,
'кг', mtl.elem_mass,
'г', mtl.elem_mass * 0.001
)
)
sum_elem_mass,
DECODE (
typ.elem_unit,
'кг', 'кг', 'г', 'кг'
)
elem_unit
FROM nomen n,
nomen_cmpo nc,
cd_prg prg,
ac_batch batch,
ac_mtl mtl,
mtl_typ typ,
prd,
inv
WHERE
batch.mtl_kind_oid = nc.mtl_kind_oid
AND batch.phys_form_oid = nc.phys_form_oid
AND batch.chem_form_oid = nc.chem_form_oid
AND batch.irrad_pur_oid = nc.irrad_pur_oid
AND check_pct (
batch.enrichmnt,
nc.down_sign,
nc.up_sign,
nc.down_pct,
nc.up_pct
) IS NULL
AND nc.nomen_oid = n.OID
AND batch.cd_prg_oid = prg.OID
AND mtl.ac_batch_oid = batch.OID
AND mtl.mtl_typ_oid = typ.OID
AND batch.inv_oid = inv.OID
AND inv.mba_oid IN (SELECT OID
FROM mba
WHERE code = 'ОЗО')
AND inv.prd_oid = prd.OID
AND inv.prd_oid IN (SELECT prd.OID
FROM prd
WHERE TO_CHAR (prd.end_prd_dt, 'DD.MM') = '31.12')
GROUP BY prg.OID,
n.name_mtl,
n.enrich_descr,
n.sort_id,
nc.enrich_descr,
batch.mtl_kind_oid,
batch.phys_form_oid,
batch.chem_form_oid,
batch.irrad_pur_oid,
prd.end_prd_dt,
typ.elem_unit;
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32093481
Фотография Gooddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся второй

SELECT
n.name_mtl, n.enrich_descr,n.sort_id, nc.enrich_descr,
prg.oid, batch.mtl_kind_oid, batch.phys_form_oid,
batch.chem_form_oid, batch.irrad_pur_oid, prd.end_prd_dt,
sum(DECODE(typ.elem_unit, 'кг', mtl.elem_mass, 'г',
mtl.elem_mass*0.001)) sum_elem_mass,
DECODE(typ.elem_unit, 'кг','кг', 'г','кг') elem_unit
FROM nomen n,
nomen_cmpo nc,
cd_prg prg,
ac_batch batch,
ac_mtl mtl,
mtl_typ typ,
prd, inv
WHERE (batch.mtl_kind_oid, batch.phys_form_oid,
batch.chem_form_oid, batch.irrad_pur_oid) in
(SELECT nc.mtl_kind_oid, nc.phys_form_oid,
nc.chem_form_oid, nc.irrad_pur_oid
FROM nomen_cmpo)
AND check_pct(batch.enrichmnt, nc.down_sign, nc.up_sign,
nc.down_pct, nc.up_pct) IS NULL
AND nc.nomen_oid = n.oid
AND batch.cd_prg_oid = prg.oid
AND mtl.ac_batch_oid = batch.oid
AND mtl.mtl_typ_oid = typ.oid
AND batch.inv_oid = inv.oid
AND inv.mba_oid in (SELECT oid
FROM mba
WHERE code = 'ОЗО')
AND inv.prd_oid = prd.oid
AND inv.prd_oid in (SELECT prd.oid
FROM prd
WHERE to_char(prd.end_prd_dt,'DD.MM') = '31.12')
GROUP BY prg.oid,
n.name_mtl,
n.enrich_descr,
n.sort_id,
nc.enrich_descr,
batch.mtl_kind_oid,
batch.phys_form_oid,
batch.chem_form_oid,
batch.irrad_pur_oid,
prd.end_prd_dt,
typ.elem_unit;
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32093490
Alexandr Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А такие банальности (что оптимизатор порой после Analyze не делает)
типа: под FROM расположить по возрастанию объема, самая связывающая таблица справа от "=", наиболее ограничивающее условие в конце Where, ...?
...
Рейтинг: 0 / 0
Медленно работает запрос
    #32093580
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнение к Alexandr Plus:

1) check_pct(...) IS NULL переделать функцию, так, чтобы она возвращала
например 0/1 (в условиях , везде где можно НЕ использовать "is NULL")

2) две связки

AND x IN (select inv.x FROM mba ...) Как заметил Alexandr Plus переделать на AND exists (select ...)

AND x IN (select inv.y FROM prd ...) Таблицы(/view) mba и prd связаны в основном условии FROM ....prd,inv WHERE ... => Эту конструкцию можно переделать на обычный AND t1.c1 = t2.c2
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Медленно работает запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]