|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Проблемма в следующем: имеется таблица в которой есть поле pay_date которое может быть как null так и not null, имеется индекс по этому полю Код: plaintext
если задать ораклу следующий запрос Код: plaintext
, то оптимизатор юзает индекс: INDEX RANGE SCAN IX_PAY_PAY_DATE . а если запросить у него только тех у кого пустая дата Код: plaintext
, то получаем TABLE ACCESS FULL . с ростом таблицы естественна скорость падает. помогите плз, может индекс нужно сделать какой-то хитрый, а может в запросе нужно что-то указать? С уважением Дима. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 12:16 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
B*Tree идекс не хранить NULL'ы ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 12:25 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
а может ему сказать хинт /*index(pay IX_PAY_PAY_DATE)*/ ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 12:34 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
и даже после этого он не начнет их хранить ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 14:01 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Согласен, но мне нужны там null'ы, нужны... неужели ничего нельзя сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 15:45 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
bitmap-индекс на дату не подойдет - сразу говорю. Что у вас NULL означает? Какой процент строк с значением NULL ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 15:52 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
select * from pay p where not exists ( select 1 from pay where rowid = p.rowid and pay_date > '01.01.1900') select * from pay where rowid not in ( select /*+ HASH_AJ а вот тут можно хинтами порулить */ rowid from pay where pay_date > '01.01.1900') если число записей с null относительно мало, то все это туфта - надо вместо null "специальную" дату, или колонку с триггером заводить на индикацию, А если много то тем более туфта. А если примерно поровну то ...не знаю ... что тут думать ? прыгать надо ! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 17:05 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Ну правильно все Nullы в индексе не хранятся, просто в записи ставится флажек что значение поля NULL. Значит чтобы выбрать Null'ы надо просканировать таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 18:30 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
При поиске когда выбирается одно из следующих условий filed!=value, field is null Оракл ВСЕГДА будет делать полное сканирование таблицы. Чтобы избежать этого в твоем случае можно заполнить null поля какой нибудь виртуальной датой типа 01.01.1111 и потом делать поиск по ней. Правда придется еще приложение подправить чуток. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2002, 07:10 |
|
Помогите оптимизировать запрос
|
|||
---|---|---|---|
#18+
Спасибо, господа хорошие, вы мне посоветовали сделать, именно то, что я и хотел сделать. А это значит, что невозможность решить данную проблемму "в лоб" связано не с моим незнанием какой-то тонкости оракла, а просто с ограничениями самой RDBMS. Вы вернули мне уверенность в самого себя. СПАСИБО !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2002, 10:34 |
|
|
start [/forum/topic.php?fid=52&fpage=2839&tid=1992983]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 254ms |
total: | 383ms |
0 / 0 |