Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 10 сообщений из 10, страница 1 из 1
03.10.2002, 12:16
    #32055118
DiMonstr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Проблемма в следующем: имеется таблица в которой есть поле pay_date которое может быть как null так и not null, имеется индекс по этому полю
Код: plaintext
create index ix_pay_pay_date on pay(pay_date)
внимание вопрос:

если задать ораклу следующий запрос
Код: plaintext
select * from pay where pay_date < sysdate

, то оптимизатор юзает индекс: INDEX RANGE SCAN IX_PAY_PAY_DATE . а если запросить у него только тех у кого пустая дата
Код: plaintext
select * from pay where pay_date is null

, то получаем TABLE ACCESS FULL . с ростом таблицы естественна скорость падает.

помогите плз, может индекс нужно сделать какой-то хитрый, а может в запросе нужно что-то указать?

С уважением Дима.
...
Рейтинг: 0 / 0
03.10.2002, 12:25
    #32055126
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
B*Tree идекс не хранить NULL'ы
...
Рейтинг: 0 / 0
03.10.2002, 12:34
    #32055134
олег111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
а может ему сказать хинт /*index(pay IX_PAY_PAY_DATE)*/
...
Рейтинг: 0 / 0
03.10.2002, 14:01
    #32055171
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
и даже после этого он не начнет их хранить ;)
...
Рейтинг: 0 / 0
03.10.2002, 15:45
    #32055201
DiMonstr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Согласен, но мне нужны там null'ы, нужны...
неужели ничего нельзя сделать?
...
Рейтинг: 0 / 0
03.10.2002, 15:52
    #32055203
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
bitmap-индекс на дату не подойдет - сразу говорю.
Что у вас NULL означает? Какой процент строк с значением NULL ?
...
Рейтинг: 0 / 0
03.10.2002, 17:05
    #32055262
ora600
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
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 "специальную" дату, или колонку с триггером заводить на индикацию,
А если много то тем более туфта. А если примерно поровну то ...не знаю ... что тут думать ? прыгать надо !
:-)
...
Рейтинг: 0 / 0
03.10.2002, 18:30
    #32055289
lvv
lvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Ну правильно все Nullы в индексе не хранятся, просто в записи ставится флажек что значение поля NULL. Значит чтобы выбрать Null'ы надо просканировать таблицу
...
Рейтинг: 0 / 0
04.10.2002, 07:10
    #32055352
GoGi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
При поиске когда выбирается одно из следующих условий filed!=value, field is null Оракл ВСЕГДА будет делать полное сканирование таблицы. Чтобы избежать этого в твоем случае можно заполнить null поля какой нибудь виртуальной датой типа 01.01.1111 и потом делать поиск по ней. Правда придется еще приложение подправить чуток.
...
Рейтинг: 0 / 0
07.10.2002, 10:34
    #32055851
DiMonstr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Спасибо, господа хорошие, вы мне посоветовали сделать, именно то, что я и хотел сделать. А это значит, что невозможность решить данную проблемму "в лоб" связано не с моим незнанием какой-то тонкости оракла, а просто с ограничениями самой RDBMS.
Вы вернули мне уверенность в самого себя.
СПАСИБО !!!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]