powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / индекс по функции
33 сообщений из 33, показаны все 2 страниц
индекс по функции
    #38979849
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Personal ORACLE 8i Release 8.1.6.0.0

1. создаю индекс по функции: Create index MY_IND on MY_TABLE(upper(NAME))
Index created

2. затем проверяю: Select * from MY_TABLE where upper(NAME)='IVAN'

3. смотрю Еxplain Plan: TABLE ACCESS FULL,
хотя по литературе должно было: INDEX RANGE SCAN

Что же я пропустил? Спасибо если кто откликнется
...
Рейтинг: 0 / 0
индекс по функции
    #38979853
vaneque
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сколько записей в таблице?
...
Рейтинг: 0 / 0
индекс по функции
    #38979854
х.з.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonast хотя по литературе должно было: INDEX RANGE SCAN

а в этой литературе сказано как заполнить табличку нужным распределением данных?
...
Рейтинг: 0 / 0
индекс по функции
    #38979855
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
около 3.5 млн
...
Рейтинг: 0 / 0
индекс по функции
    #38979860
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
х.з.,

Этого не встречал. Просто повторил пример, который был приведен
...
Рейтинг: 0 / 0
индекс по функции
    #38979868
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
индекс по функции
    #38979871
vaneque
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8-й оракл не успел застать, может там какие свои фишки...

Select NAME from MY_TABLE where upper(NAME)='IVAN'

а так какой план будет?)
...
Рейтинг: 0 / 0
индекс по функции
    #38979876
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vaneque,

В приведенной ссылке как раз говорится об oracle 8i
...
Рейтинг: 0 / 0
индекс по функции
    #38979878
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonast8.1.6Древнота...
RTFM QUERY_REWRITE_ENABLED (FAQ) :
автор... Query rewrite is disabled by default. ...
... If this parameter is set to FALSE, Oracle will not use function-based indexes ...
...
Рейтинг: 0 / 0
индекс по функции
    #38979884
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Пробовал:

QUERY_REWRITE_ENABLED = ТRUE

QUERY_REWRITE_INTEGRITY = TRUSTED

Не помогло
...
Рейтинг: 0 / 0
индекс по функции
    #38979895
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastПробовал:Да не пробовать надо, а выкинуть этот хлам на помойку.
...
Рейтинг: 0 / 0
индекс по функции
    #38979912
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Абсолютно согласен.
Непонятно только одно: почему индекс создается нормально, а пользоваться им не удается.
Сказали бы сразу, что этот тип индекса не поддерживается.
...
Рейтинг: 0 / 0
индекс по функции
    #38979914
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastСказали бы сразу, что этот тип индекса не поддерживается.Ты просто не умеешь его готовить. А мы забыли и не захотим вспоминать.
...
Рейтинг: 0 / 0
индекс по функции
    #38980020
ten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastЭтого не встречал. Просто повторил пример, который был приведен
В примере вставляется всего тысяча строк, так что откуда 3,5 миллиона? :)
Покажи как именно заполнял тестовую табличку.
...
Рейтинг: 0 / 0
индекс по функции
    #38980030
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ten,

Тестовая таблица была задолго до создания индекса.
Далее я построил индекс и т.д. как описано в первом сообщении.
...
Рейтинг: 0 / 0
индекс по функции
    #38980031
ten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastТестовая таблица была задолго до создания индекса.
На 99% это и является причиной неиспользования индекса, а если точнее, то те данные, которые лежат в таблице.
...
Рейтинг: 0 / 0
индекс по функции
    #38980039
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ten,
Если я провильно понял для работы с индексом по функции нужно:
а. создать таблицу
б. создать индекс
и только после этого начать ее заполнении.
При уже заполненной таблице индекс по функции не работает ?????
...
Рейтинг: 0 / 0
индекс по функции
    #38980046
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastPersonal ORACLE 8i Release 8.1.6.0.0
. . .
Спасибо если кто откликнетсяС тех пор прошло уже 15 лет...

Я уже забыл намного больше, чем ты знаешь... :-)

P.S. У меня на шкафу стоит Вычислительная машина "Быстрица-2".
Не желаете ли изучить его фичи и поискать баги? :-)

YouTube Video
...
Рейтинг: 0 / 0
индекс по функции
    #38980052
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL*Plus,
Да, кстати по БЫСТРИЦЕ -2 то же пара вопросов, спасибо что напомнили.
При инсталяции ОРАКЛ 8 на БЫСТРИЦУ -2, что то не ладилось.
Может поможете.
...
Рейтинг: 0 / 0
индекс по функции
    #38980057
нлс сортир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
levonastПробовал:

QUERY_REWRITE_ENABLED = ТRUE

QUERY_REWRITE_INTEGRITY = TRUSTED

Не помоглоштудируй соответствующую версии доку. там могли упоминаться и другие пререквесты типа обязательности хинта.
...
Рейтинг: 0 / 0
индекс по функции
    #38980062
ten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastЕсли я провильно понял
Нет. Скорее всего причиной неиспользования индекса является либо распределение данных в таблице, которое делает невыгодным использование индекса, либо отсутствие/неправильная статистика этого распределения.
А вообще для начала смотрите:
FAQ: Основные причины ошибок CBO.
Google
STFF
...
Рейтинг: 0 / 0
индекс по функции
    #38980067
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.
Не смею далее отвлекать своими недостойными вопросами
...
Рейтинг: 0 / 0
индекс по функции
    #38980369
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastСпасибо всем.
Не смею далее отвлекать своими недостойными вопросами
не уверен, но может быть проблема и из-за Personal
там были ограничения

если добавить хинт
/*+ use_index(t MY_IND) */
то тож не использует?

.....
stax
...
Рейтинг: 0 / 0
индекс по функции
    #38980628
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До 10g надо было обязательно собирать статистику
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
demo56> create table t1 as select * from all_objects;

Table created.

demo56> create index t1_idx on t1(upper(object_name));

Index created.

demo56> explain plan for select * from t1 where upper(object_name)='DUAL';

Explained.

demo56> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------

--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |       |       |       |
|*  1 |  TABLE ACCESS FULL   | T1          |       |       |       |
--------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(UPPER("T1"."OBJECT_NAME")='DUAL')

Note: rule based optimization

14 rows selected.

demo56> exec dbms_stats.gather_table_stats(user, 'T1', cascade=>true)

PL/SQL procedure successfully completed.

demo56> explain plan for select * from t1 where upper(object_name)='DUAL';

Explained.

demo56> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------

---------------------------------------------------------------------------
| Id  | Operation                   |  Name       | Rows  | Bytes | Cost  |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |     2 |   186 |     4 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T1          |     2 |   186 |     4 |
|*  2 |   INDEX RANGE SCAN          | T1_IDX      |     2 |       |     3 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access(UPPER("T1"."OBJECT_NAME")='DUAL')

Note: cpu costing is off

15 rows selected.

...
Рейтинг: 0 / 0
индекс по функции
    #38980706
х.з.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровДо 10g надо было обязательно собирать статистику
Слава где-то откопал персональный 8 оракл? ;)

но в общем-то я хотел сказать другое: если последний совет не поможет, можно выложить полный листинг создания, заполнения таблицы и т.д. И может быть тебе подскажут чего ты забыл сделать чтобы индекс подхватился.
...
Рейтинг: 0 / 0
индекс по функции
    #38980717
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это 9-ка
Но и для 8-ки это было обязательнымOracle8i Administrator's Guide
Release 2 (8.1.6)
Managing Indexes
Creating a Function-Based IndexYou must have the following initialization parameters defined to create a function-based index:
QUERY_REWRITE_INTEGRITY must be set to TRUSTED


QUERY_REWRITE_ENABLED must be set to TRUE


COMPATIBLE must set to 8.1.0.0.0 or a greater value


Additionally, to use a function-based index:

The table must be analyzed after the index is created.


The query must be guaranteed not to need any NULL values from the indexed expression, since NULL values are not stored in indexes.
...
Рейтинг: 0 / 0
индекс по функции
    #38980732
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Спасибо Вам большое, видимо действительно 'проблема и из-за Personal '.
Будем искать другие пути.
...
Рейтинг: 0 / 0
индекс по функции
    #38980740
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты статистику собирал?
...
Рейтинг: 0 / 0
индекс по функции
    #38980756
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Нет. Но я сделал все другие рекомендации данные выше. Не помогло.
Думаю:
1. сделать обычный индекс по нужному полю,
2. для ранее введеных данных сделать: Update ... set name=upper(name)
3. для последующих вводов перед Insert перевести в upper(name)
...
Рейтинг: 0 / 0
индекс по функции
    #38980758
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пилите, Шура...
...
Рейтинг: 0 / 0
индекс по функции
    #38982647
Core0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проверьте для начала не сталкиваетесь ли вы с ограничениями по использования функционального индекса.
(данный индекс используется только посредством CBO при наличии статистики)
список ограничений можно найти здесь:
http://docs.oracle.com/cd/A87860_01/doc/appdev.817/a76939/adg06idx.htm#7085

если с ограничениями все в порядке, проверьте статистику
- есть ли гистограммы по столбцу
- селективность индекса, фактор кластеризации
http://docs.oracle.com/cd/A87860_01/doc/server.817/a76992/stats.htm#27514
...
Рейтинг: 0 / 0
индекс по функции
    #38982781
levonast,

чему равно значение параметра OPTIMIZER_MODE ? Вроде как, для перехода в режим CBO должно быть все что угодно, только не RULE.
ну и про статистику тебе уже два раза говорили, скажу третий.
FBI - фича, требующая CBO. CBO работает только при наличии статистики по объектам запроса. Нет статистики - работает RBO. RBO понятия не имеет о существовании FBI и банально не умеет использовать его.
...
Рейтинг: 0 / 0
индекс по функции
    #38982797
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не уверен, что в тему
Том Кайт в книге по 8-ому Оракл, описывая индекс по функции, писал еще и substr

авторДавайте посмотрим, как добавление индекса по функции позволит ускорить работу.
Сначала создадим индекс следующим образом:
Код: plsql
1.
2.
3.
4.
tkyte@TKYTE816>;create index emp_soundex_idx on
2 emp(substr(my_soundex(ename),1,6))
3/
Index created.

Обратите внимание,что в этом операторе создания индекса используется функция SUBSTR.
Дело в том,что индексируется функция,возвращающая строку.Если бы
индексировалась функция,возвращающая число или дату,эта функция SUBSTR не
понадобилась бы.Применять функцию SUBSTR к заданным пользователем функциям, возвращающим строки,необходимо потому, что они возвращают данные типа VARCHAR2(4000) и т.д.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / индекс по функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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