Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите разобраться  [new]
YagMort
Member

Откуда:
Сообщений: 52
Есть таблица TABLE в которой созданы два индекса DATE1 и DATE2

-- Запрос выполняется 10 секунд. Индекс не задействован.
SELECT * FROM TABLE
WHERE DATE1 BETWEEN to_date('01012014 00:00:00', 'DDMMYYYY hh24:mi:ss') AND to_date('31012014 23:59:59', 'DDMMYYYY hh24:mi:ss') 
AND DOCNUM='ХХХХХХХ'

План запроса:
SELECT STATEMENT, GOAL = ALL_ROWS			31607	1	189
 TABLE ACCESS FULL	IST	TABLE	31607	1	189



--Запрос выполняется <1 секунды. Индекс задействован.
SELECT * FROM TABLE
WHERE DATE2 BETWEEN to_date('01012014 00:00:00', 'DDMMYYYY hh24:mi:ss') AND to_date('31012014 23:59:59', 'DDMMYYYY hh24:mi:ss') 
AND DOCNUM='ХХХХХХХ'

SELECT STATEMENT, GOAL = ALL_ROWS			15458	1	189
 TABLE ACCESS BY INDEX ROWID	IST	TABLE	15458	1	189
  INDEX RANGE SCAN	IST	IDX-TABLE-DATE2	180	50234	


После того как я сделал: ALTER INDEX "IDX-TABLE-DATE1" REBUILD, впринципе ничего не изменилось, селект стал выполняться немного быстрее, но индекс так и не задействован.
Что можно сделать чтобы индекс был задействован (при применении хинта RULE в селекте он становится задействован, но я думаю это не выход)?
29 янв 14, 14:30    [15488160]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
YagMort,

(в контексте этого запроса) я бы подумал про индекс над (DOCNUM)
29 янв 14, 14:41    [15488247]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться  [new]
Corner
Member

Откуда:
Сообщений: 1270
покажите
SELECT count(*) FROM TABLE;

SELECT count(*) FROM TABLE
WHERE DATE1 BETWEEN to_date('01012014 00:00:00', 'DDMMYYYY hh24:mi:ss') AND to_date('31012014 23:59:59', 'DDMMYYYY hh24:mi:ss');

SELECT count(*) FROM TABLE
WHERE DATE2 BETWEEN to_date('01012014 00:00:00', 'DDMMYYYY hh24:mi:ss') AND to_date('31012014 23:59:59', 'DDMMYYYY hh24:mi:ss');
29 янв 14, 14:43    [15488267]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться  [new]
YagMort
Member

Откуда:
Сообщений: 52
Corner
покажите
1) SELECT count(*) FROM TABLE;

2) SELECT count(*) FROM TABLE
WHERE DATE1 BETWEEN to_date('01012014 00:00:00', 'DDMMYYYY hh24:mi:ss') AND to_date('31012014 23:59:59', 'DDMMYYYY hh24:mi:ss');

3) SELECT count(*) FROM TABLE
WHERE DATE2 BETWEEN to_date('01012014 00:00:00', 'DDMMYYYY hh24:mi:ss') AND to_date('31012014 23:59:59', 'DDMMYYYY hh24:mi:ss');



1) 4551750;

2) 367291;

3) 367317;
29 янв 14, 14:49    [15488343]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться  [new]
Corner
Member

Откуда:
Сообщений: 1270
пересоберите статистику
29 янв 14, 14:53    [15488405]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться  [new]
feag0r
Guest
попробуй собрать статистику по индексу DATE1, dbms_stats.gather_index_stats
29 янв 14, 14:55    [15488429]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться  [new]
YagMort
Member

Откуда:
Сообщений: 52
Запустил:
BEGIN
dbms_stats.gather_table_stats(ownname=> 'IST', tabname=> 'TABLE', partname=> NULL);
dbms_stats.gather_index_stats(ownname=> 'IST', indname=> '"IDX-TABLE-DATE1"', partname=> NULL);
END;


Скорость выполнения запросов не изменилась, но по DATA2 теперь индекс не используется :)

Statistics DATA1
Last Analyzed 29-Jan-2014 15:11:29
Blevel 2
Distinct Keys 4343717
Clustering Factor 4257804
Leaf Blocks 12312
Average Leaf Blocks Per Key 1
Average Data Blocks Per Key 1
Number of Rows 4640730
Sample Size 433841


Statistics DATA2
Last Analyzed 29-Jan-2014 15:11:27
Blevel 2
Distinct Keys 3665920
Clustering Factor 1387371
Leaf Blocks 16249
Average Leaf Blocks Per Key 1
Average Data Blocks Per Key 1
Number of Rows 4641429
Sample Size 328781
29 янв 14, 15:24    [15488670]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться  [new]
YagMort
Member

Откуда:
Сообщений: 52
Добавил индекс на DOCNUM, теперь все замечательно.
Всем откликнувшимся спасибо!
29 янв 14, 15:44    [15488834]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить