![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрсы в [Oracle]
bas © (2002-02-22 16:26:00)Привет! Есть проблемма. Делаю два запроса:
select min(NFR_ID) from FUTRATE where NFR_ID > 6305056
select min(NFR_ID) from FUTRATE where nF_id=161 and NFR_ID > 6305056;
Первый выполняется 10мсек, второй 15сек. Оба поля проиндексированны, в таблице около 6миллиона записей. Делал соместный индекс(nf_id,nfr_id) не помогает. Если кто-то встречал подобный трабл - ответи, плиз, очень надо
Bachin (2002-02-22 19:27:00) [1]это не для времени :) - просто я стормозил :)))
select count(*)
from ( select nf_id
from futrate
group by nf_id ) a
просто хотелось оценить полезность индекса...
кстати, добавил индекс надеюсь в таком порядке: nf_if, nfr_id.
petr_v_a (2002-02-22 18:53:00) [2]>Но как от этого избавится
> как запрос оптимизировать?
analyze table FUTRATE
bas (2002-02-22 18:19:00) [3]оБЕСНЯЮ
NFR_ID -Primary KEY
NF_ID -Forign Key
>petr_v_a
Ты прав на счет Хороших и плохих. Но как от этого избавится
как запрос оптимизировать?
>Bachin
Время
select count(*) from FUTRATE group by nF_id
49 сек
select count(*) from FUTRATE group by NFR_ID
39 cек
Bachin (2002-02-22 18:07:00) [4]Для большей понятности твоиз данных выдай в студию
select count(*) from FUTRATE group by nF_id
и
select count(*) from FUTRATE group by NFR_ID
petr_v_a (2002-02-22 17:52:00) [5]а может быть и такое :)))
по NFR_ID индекс "хороший", с большим отношением (кол-во_различных_значений)/(кол-во_значений), а по nF_id - с маленьким, и толку от него нет, а статистики по таблице/индексам не собраны => индексы для оптимизатора равнозначны.
bas (2002-02-22 17:20:00) [6]>EAlexander Если не влом. Ответь, плиз, сильно повысится призводительность, если использовать hint. Примерно во сколько.
А то м.б. и не стоит рыпатся:)). У тебя сколько записей было в таблице. У меня уже 6. мил. и б. расти - каждый день туда пихается до 80тыс. записей. О чистке истории я уже думал, но еще руки не дошли. Спасибо.
bas (2002-02-22 17:07:00) [7]Спасибо за совет - где копать.
Не совсем понял ,но теперь в хелпе буду читать.
Еще раз спасибо.
EAlexander (2002-02-22 16:50:00) [8]hint - это указание оптимизатору Ora как выполнять запрос.
Например:
SELECT /*+ INDEX_DESC(TEST_SETI I_TEST_SETI) FIRST_ROWS INDEX_FFS*/
N_SH, TESTTIME, ELM, WA, WB, WC,
VAA, VAB, VAC, FREQ,
IA, IB, IC, UA, UB, UC, PFANGA,
PFANGB, PFANGC, PHANGB, PHANGC
FROM CNT.TEST_SETI
WHERE N_SH = :P_N_SH
AND TESTTIME <= :P_TESTTIME
AND ROWNUM < 2
будет выбираться последняя строка из таблицы на указанный момент (TestTime) при этом сортировка делается по указанному индексу INDEX_DESC(TEST_SETI I_TEST_SETI), где
TEST_SETI - имя таблицы, а I_TEST_SETI используемый индекс.
Я бы рекомендовал использовать SQL Navigator - там просто и понятно показыватся план исполнения запроса.
bas (2002-02-22 16:46:00) [9]Для проверки оба запроса делаются зерез SQL+(один за другим).
А что такое hint.
Спасибо за ответ
EAlexander (2002-02-22 16:39:00) [10]посмотрите план выполнения запросов. наверно второй делается через full scan. можно пропробоват использовать hint в запросе.