powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не работает INDEX RANGE SCAN DESCENDING
33 сообщений из 33, показаны все 2 страниц
Не работает INDEX RANGE SCAN DESCENDING
    #39871142
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! По книге Т.Кайта изучаю индексы, упорядоченные по убыванию.
Создаю таблицу:
Код: plsql
1.
2.
create table t as
select * from all_objects;


Создаю индекс:
Код: plsql
1.
create index t_idx on t(owner, object_type, object_name);


Выполняю процедуру:
Код: plsql
1.
exec dbms_stats.gather_table_stats(user, 'T', method_opt=>'for all indexed columns');


Пишу такой запрос:
Код: plsql
1.
2.
3.
4.
select owner, object_type from t
where owner between 'T' and 'Z'
  and object_type is not null
order by owner desc, object_type desc;


Вопрос! Почему в плане запроса отсутствует INDEX RANGE SCAN DESCENDING, а сам запрос выглядит так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Plan hash value: 2813023843
 
----------------------------------------------------------------------------
| Id  | Operation         | Name  | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |       |    981 | 17658 |    11  (10)| 00:00:01 |
|   1 |  SORT ORDER BY    |       |    981 | 17658 |    11  (10)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN| T_IDX |    981 | 17658 |    10   (0)| 00:00:01 |
----------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access("OWNER">='T' AND "OWNER"<='Z')
       filter("OBJECT_TYPE" IS NOT NULL)
 
Note
-----
   - Warning: basic plan statistics not available. These are only collected when:
       * hint 'gather_plan_statistics' is used for the statement or
       * parameter 'statistics_level' is set to 'ALL', at session or system level



Почему нет чтения индекса в обратном порядке, а присутствует сортировка?

С хинтом в запросе:
Код: plsql
1.
2.
3.
4.
select /*+ gather_plan_statistics */ owner, object_type from t
where owner between 'T' and 'Z'
  and object_type is not null
order by owner desc, object_type desc;


ситуация повторяется.

Версия Oracle: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871154
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultrasonic7Почему нет В твоей БД вероятно нет owner >= T и распределение количества объектов в них сильно неравномерно.
Поставь на первое место в индексе object_name, соответствующую сортировку и поиграйся с диапазоном between.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871160
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменил диапазон (объекты с владельцем SYS уж точно есть:)) )

Код: plsql
1.
2.
3.
4.
select /*+ gather_plan_statistics */ owner, object_type from t
where owner between 'S' and 'Z'
  and object_type is not null
order by owner desc, object_type desc;



План поменялся, но пока тоже нет сканирования в обратном порядке:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Plan hash value: 3276893591
 
---------------------------------------------------------------------------------------
| Id  | Operation             | Name  | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       | 40330 |   708K|       |   348   (3)| 00:00:02 |
|   1 |  SORT ORDER BY        |       | 40330 |   708K|  1120K|   348   (3)| 00:00:02 |
|*  2 |   INDEX FAST FULL SCAN| T_IDX | 40330 |   708K|       |   142   (3)| 00:00:01 |
---------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter("OWNER">='S' AND "OWNER"<='Z' AND "OBJECT_TYPE" IS NOT NULL)
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871161
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-ultrasonic7Почему нет В твоей БД вероятно нет owner >= T и распределение количества объектов в них сильно неравномерно.
Поставь на первое место в индексе object_name, соответствующую сортировку и поиграйся с диапазоном between.

Может, ламерский вопрос, но может это быть связано с какими-то глобальными, админскими настройками базы?
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871163
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultrasonic7Может, ламерский вопрос, но может это быть связано с какими-то глобальными, админскими настройками базы?
Установите NLS_SORT и NLS_COMP в binary.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871164
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ultrasonic7,

получи планы для
Код: plsql
1.
2.
3.
4.
select/*+ index_asc(t T_IDX) */ owner, object_type from t
where owner between 'T' and 'Z'
  and object_type is not null
order by owner desc, object_type desc


и
Код: plsql
1.
2.
3.
4.
select/*+ index_desc(t T_IDX) */ owner, object_type from t
where owner between 'T' and 'Z'
  and object_type is not null
order by owner desc, object_type desc


сравни косты, если хочешь глубже - сравни трассировки 10053
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871170
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousultrasonic7Может, ламерский вопрос, но может это быть связано с какими-то глобальными, админскими настройками базы?
Установите NLS_SORT и NLS_COMP в binary.

Код: plsql
1.
ALTER SESSION SET NLS_SORT = BINARY; -- NLS_COMP уже был в BINARY



Спасибо! Помогло!))

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Plan hash value: 2685572958
 
-------------------------------------------------------------------------------------
| Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |       | 41624 |  1707K|   302   (1)| 00:00:02 |
|*  1 |  INDEX RANGE SCAN DESCENDING| T_IDX | 41624 |  1707K|   302   (1)| 00:00:02 |
-------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - access("OWNER">='S' AND "OWNER"<='Z')
       filter("OBJECT_TYPE" IS NOT NULL)
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871171
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем ответившим. Сейчас поиграюсь еще с хинтами.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871173
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderсравни костыДля разных запросов сравнить косты?
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871175
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ORA__SQL,

в чем же они разные?
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871176
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, сейчас NLS_SORT сделаю обратно в RUSSIAN и сравню косты
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871177
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderв чем же они разные?Ну так ведь хинты разные
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871178
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ultrasonic7Да, сейчас NLS_SORT сделаю обратно в RUSSIAN и сравню костыда уж нет смысла, я просто не думал, что у вас NLS_SORT разные...
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871180
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ORA__SQLxtenderв чем же они разные?Ну так ведь хинты разныеи?
да даже хрен с ним с хинтами, в принципе, то, что нельзя сравнивать косты разных запросов - это миф.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871210
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderORA__SQLпропущено...
Ну так ведь хинты разныеи?
да даже хрен с ним с хинтами, в принципе, то, что нельзя сравнивать косты разных запросов - это миф.
Вопрос не в мифах, а в том, что при NLS_SORT=RUSSIAN избавиться от сортировки на классическом индексе не удастся без NLS-новофич.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871236
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymous,

Не то комментируешь. Я ж на одно сообщение выше так и написал. Ну и навтыкать nls_sort в запрос и индекс не такой уж новодел), а новомодный collate на столбце как то ещё страшновато юзать
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871256
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderнавтыкать nls_sort в запрос и индекс
Это можно, но
- требует EE-лицензии
- хлопотно
- обещает сложности на мультиязычных проектах
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871453
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousxtenderнавтыкать nls_sort в запрос и индекстребует EE-лицензииДа ну?
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871652
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicДа ну?
Дык FBI жеж...
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871655
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousДык FBI жеж...Это древний миф.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871657
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousДык FBI жеж...По твоей "логике" и виртуальные колонки - EE?
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871658
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicandrey_anonymousДык FBI жеж...По твоей "логике" и виртуальные колонки - EE?
Виталий, выражайся пожалуйста по теме.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871664
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousпо теме.Elicandrey_anonymousДык FBI жеж...Это древний миф.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871672
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousElicПо твоей "логике" и виртуальные колонки - EE?Виталий, выражайся пожалуйста по теме.Ты не хочешь включить свой причинно-следственный аппарат.
Индекс по колонке - EE?
Индекс по виртуальной колонке - EE?
Если ты считаешь, что "нет"+"да", то мой процитированный вопрос.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871676
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicandrey_anonymousпропущено...
Виталий, выражайся пожалуйста по теме.Ты не хочешь
Мои желания не являются предметом данного топика.
Выражайся пожалуйста по теме.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871690
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВыражайся пожалуйста по теме.Тема - IRSD. Твои страшилки про EE из-за FBI - "в тему?"
В любом случае повторю, FBI не требует EE.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39871699
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicFBI не требует EE.
Спасибо, Виталий, за ценное замечание.
Начиная с (11-й?) версии FBI разрешили всем.
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39872393
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtenderandrey_anonymous,
навтыкать nls_sort в запрос и индекс
Было бы очень полезно - поместить NLS_SORT в запрос. В принципе, если делать это в процедуре PL/SQL, то это возможно. ALTER SESSION и все дела. А есть ли какой-то способ установить NLS_SORT непосредственно в самом запросе? Например, при написании вьюхи? Типа хинта оптимизатора?
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39872395
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultrasonic7установить NLS_SORT непосредственно в самом запросеNLSSORT
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39872410
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то типа такого запроса будет:
Код: plsql
1.
2.
3.
4.
5.
select owner, object_type from t
where owner between 'S' and 'Z'
  and object_type is not null
order by NLSSORT(owner, 'NLS_SORT=BINARY') desc,
         NLSSORT(object_type, 'NLS_SORT=BINARY') desc;



Проверил с этой функцией тоже. Хотя, к сожалению, INDEX RANGE SCAN DESCENDING был только после ALTER SESSION ((
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39872412
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultrasonic7Хотя, к сожалению, INDEX RANGE SCAN DESCENDING был только после ALTER SESSION ((Ты плохо читал про FBI. 21986038
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39872497
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elicultrasonic7Хотя, к сожалению, INDEX RANGE SCAN DESCENDING был только после ALTER SESSION ((Ты плохо читал про FBI. 21986038
Индекс, основанный на функциях? Я новичок в деле индексов, можете привести пример?
...
Рейтинг: 0 / 0
Не работает INDEX RANGE SCAN DESCENDING
    #39872501
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока только такое приходит на ум:
Код: plsql
1.
create index func_t_idx on t(NLSSORT(owner, 'NLS_SORT=BINARY'), NLSSORT(object_type, 'NLS_SORT=BINARY'));
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не работает INDEX RANGE SCAN DESCENDING
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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