powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему лучшее использование индексов при таком переписывании запроса
14 сообщений из 14, страница 1 из 1
Почему лучшее использование индексов при таком переписывании запроса
    #39954947
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!


Запрос значительно тормозил и оптимизатор не хотел использовать индексы

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select *
from 
   protocol p
where 
   p.ID > 170834164 and
   ... -- << почему-то индекс, специально созданный сля этого случая, не используется
order by 
   p.ID desc



удивился, что индекс не используется. Решил переписать запрос на аналогичный по смыслу

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select *
from 
   protocol p
where 
   exists(select 1 from dual where p.ID > 170834164) and
   ... -- и вдруг индекс стал использоваться
order by 
   p.ID desc



и индекс вдруг вкючился. Но почему?
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39954986
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

это не имеет значения, да и ответ на этот вопрос даст разглядывания плана запроса.

Имеет значение совершенно другое - кто тебя так перепугал, что вдруг решил, что использование индекса "лучшее".
А если, не дай бог, в какой книжке вредных советов вычитал, то вот тебе разумный совет:
Сожги ту книжку в печи немедленно , чтобы самому не читать и у других возможности набраться безумия не было.
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39954992
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

https://www.sql.ru/faq/faq_topic.aspx?fid=344


....
stax
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955002
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Имеет значение совершенно другое - кто тебя так перепугал, что вдруг решил, что использование индекса "лучшее".

перепугать так его могло знание поддерживаемой системы, и особенностей данных, в этой системе хранящихся.
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955004
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

Дело не в прочитанных книгах :) , а в невероятном замедлении запросов если индекс не используется


-
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955007
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кроик Семён,

приложенные запросы отличаются от стартового отсутствием сортировки. Что в итоге вам надо то?
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955012
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

автора в невероятном замедлении запросов если индекс не используется
похоже, ты даже не смотришь в то, что выкладываешь.
И это правильно.
Просто добавь rownum = 1 в исходный запрос - жизнь и наладится.
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955019
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Почему лучшее использование индексов при таком переписывании запроса



Видно, что при использовании предиката
Код: plsql
1.
tbl = 'SCHLIESSANLAGE'

подхватывается индекс IDX_PROTOCOL__SUCH_TBLFK, тогда как с предикатом
Код: plsql
1.
tbl = 'SCHLIESSANLAGE' and ID > 170834164

подхватывается SYS_C003161, потому что стоимость его сканирования 4680 дешевле, чем у предыдущего 5000.
Почему медленнее - недостаточно информации, предполагаю это index skip scan в обёртке index range scan. Тебе стоит приложить вывод DISPLAY_CURSOR() с предикатами и run time статистиками
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955022
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Anokhin,

да. я был неправ.

вероятно, это PK

нужно использовать что-то вроде
Код: plsql
1.
and  lnnvl(ID <= 170834164)


вместо and ID > 170834164
или (ID + 0) > 170834164
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955028
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провел тест, выбрал другой ID, гораздо более меньший, чтобы запрос начал выдавать больше одной строки.
И интересно, вариант с EXISTS (и ORDER BY) стал резко медленее .


Всем большое спасибо
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955030
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
...

Всем большое спасибо

ой...

ох, книжки надо бы жечь, но не все...
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955033
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955034
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вобщем, скорость выполнения запроса (с выгрузкой всех строк) почти одинаковая
...
Рейтинг: 0 / 0
Почему лучшее использование индексов при таком переписывании запроса
    #39955181
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
Провел тест, выбрал другой ID, гораздо более меньший, чтобы запрос начал выдавать больше одной строки.

конечно, селективность меняется
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему лучшее использование индексов при таком переписывании запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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