Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Вниз

Запрсы в 


bas   (2002-02-22 16:26) [0]

Привет! Есть проблемма. Делаю два запроса:

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) не помогает. Если кто-то встречал подобный трабл - ответи, плиз, очень надо



EAlexander   (2002-02-22 16:39) [1]

посмотрите план выполнения запросов. наверно второй делается через full scan. можно пропробоват использовать hint в запросе.



bas   (2002-02-22 16:46) [2]

Для проверки оба запроса делаются зерез SQL+(один за другим).
А что такое hint.
Спасибо за ответ



EAlexander   (2002-02-22 16:50) [3]

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 17:07) [4]

Спасибо за совет - где копать.
Не совсем понял ,но теперь в хелпе буду читать.
Еще раз спасибо.



bas   (2002-02-22 17:20) [5]

>EAlexander Если не влом. Ответь, плиз, сильно повысится призводительность, если использовать hint. Примерно во сколько.
А то м.б. и не стоит рыпатся:)). У тебя сколько записей было в таблице. У меня уже 6. мил. и б. расти - каждый день туда пихается до 80тыс. записей. О чистке истории я уже думал, но еще руки не дошли. Спасибо.



petr_v_a   (2002-02-22 17:52) [6]

а может быть и такое :)))
по NFR_ID индекс "хороший", с большим отношением (кол-во_различных_значений)/(кол-во_значений), а по nF_id - с маленьким, и толку от него нет, а статистики по таблице/индексам не собраны => индексы для оптимизатора равнозначны.



Bachin   (2002-02-22 18:07) [7]

Для большей понятности твоиз данных выдай в студию
select count(*) from FUTRATE group by nF_id
и
select count(*) from FUTRATE group by NFR_ID



bas   (2002-02-22 18:19) [8]

оБЕСНЯЮ
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ек



petr_v_a   (2002-02-22 18:53) [9]

>Но как от этого избавится
> как запрос оптимизировать?

analyze table FUTRATE



Bachin   (2002-02-22 19:27) [10]

это не для времени :) - просто я стормозил :)))
select count(*)
from ( select nf_id
from futrate
group by nf_id ) a

просто хотелось оценить полезность индекса...

кстати, добавил индекс надеюсь в таком порядке: nf_if, nfr_id.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.03 c
1-66922           sergey2               2002-03-06 13:41  2002.03.21  
Hint, ComboBox


14-66981          Mike_Goblin           2002-01-27 18:09  2002.03.21  
Кто смотрел кино


14-66979          vopros                2002-02-07 16:39  2002.03.21  
Кто от куда прпроизошел.


4-67050           DNT                   2001-12-30 20:43  2002.03.21  
Как определить handle активного окна?


4-67059           Zja                   2001-12-26 01:13  2002.03.21  
Midi в ресурсах