|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
Выполняю следующее: select * from events where event_time > sysdate Выполняется за 0,05 sec Стоимость 4 А если так : select * from events where event_time > (sysdate -1) тогда за 0,50 стоимость 17 Eplain plan сообщил что индекс не срабатывает и происходит FULL TABLE ACCESS ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 16:43 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
Мало информации. Приведите два плана и желательно с характеристиками объектов (кардинальность, колл. блоков данных на ключ для индекса, колл. блоков в таблице). И значение параметра optimizer_index_cost_adj. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 16:53 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
а, еще попробуйте без скобок и напишите какая версия Оракла. В 8.1.7 в выражении типа sysdate-1 индекс всегда используется. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 16:56 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
1)select * from events where event_time > sysdate Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=3 Bytes=216) 1 0 PARTITION RANGE (ITERATOR) 2 1 TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'EVENTS' (Cost=4 Card=3 Bytes=216) 3 2 INDEX (RANGE SCAN) OF 'IDX_EVENTS_' (NON-UNIQUE) (Cost =2 Card=3) 2)select * from events where event_time > (sysdate - 1) Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=16 Card=455 Bytes=32 760) 1 0 PARTITION RANGE* (ITERATOR) :Q381200 0 2 1 TABLE ACCESS* (FULL) OF 'EVENTS' (Cost=16 Card=455 Bytes :Q381200 =32760) 0 1 PARALLEL_COMBINED_WITH_PARENT 2 PARALLEL_TO_SERIAL SELECT /*+ NO_EXPAND ROWID(A1) */ A1."EVENT_ ID",A1."LEAG_ID",A1."USER_ID",A1."ET Пожалуйста, подскажите что делать? Зарание благадорю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 17:18 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
Oracle 9.0.2 Я пробовал и со скобками и без них Я пробовал и во так event_time > (select to_date('13102002 16:17','DDMMYYYY HH24:MI') from dual) или так event_time > to_date('13102002 16:17','DDMMYYYY HH24:MI') Не помогает Всё равно индекс не сробатывает Только так event_time > sysdate ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 17:22 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
у вас PQO срабатывает. Попробуйте хинт /*+ NOPARALLEL(events) */ ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 17:27 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
гораздо интереснее понять почему PQO срабатывает? Похоже, что в первом случае sysdate неявно приводится к литералу, а во втором уже не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 17:33 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
может там статистика просто не собрана? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 17:36 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
select /*+ NOPARALLEL(events) */* from events where event_time > (sysdate - 1) Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=32 Card=455 Bytes=32 760) 1 0 PARTITION RANGE (ITERATOR) 2 1 TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'EVENTS' (Cost=32 Card=455 Bytes=32760) 3 2 INDEX (RANGE SCAN) OF 'IDX_EVENTS_' (NON-UNIQUE) (Cost =2 Card=455) Ну вот проблема теперь вот какая : 1) ( > sysdate) Индексы срабатывает Cost 4 2) ( > sysdate - 1) Индексы не срабатывает cost 16 3) select /*+ NOPARALLEL(events) */* from events where event_time > (sysdate - 1) Индексы срабатывает НО Cost 32 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 17:42 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
Забудьте про cost. В этом нет ничего страшного, если запрос отрабатывает за меньшее время. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 17:57 |
|
Почему так... И что мне сделать... ???
|
|||
---|---|---|---|
#18+
Вопрос в следующем Почему оптимизатор sysdate и sysdate - 1 обрабатывает по разному? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2002, 18:06 |
|
|
start [/forum/topic.php?fid=52&msg=32058092&tid=1992941]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 383ms |
0 / 0 |