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


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