Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > multicolumn CONTEXT index


Автор: onsh76 15.2.2006, 04:46
Народ, выведите на путь истинный...
Задолбался уже о стенку биться. smile

Имелся ряд standalone CONTEX Оракл Техт индексов используемых в запросе. Перформанс был ну мягко скажем не очень...
Когда обьединили standalone индексы, относящиеся к одной и той же таблице, получили big releaf по response time, но потеряли транзакционность: не видно изменений, когда значение в одной из колонок обьеденненного индекса апдейтится.
Запрашиваю таблицу DR$<index_name>$I: токен не проиндексирован.

Вот стэйтмент которым генерю индекс:

Код

CREATE INDEX rep_mlt
ON rep (rep_id)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS (' MEMORY 98M SECTION GROUP rep_multigroup LEXER my_lexer STOPLIST my_stop WORDLIST my_wordlist DATASTORE ctx_mltstr_rep SYNC(EVERY "SYSDATE+5/1440") TRANSACTIONAL');

Я уже и вручную синхронизировал индекс с помощью :
1. exec CTX_DDL.OPTIMIZE_INDEX( idx_name => 'rep_mlt', optlevel => 'FULL');
2. exec CTX_DDL.SYNC_INDEX('rep_mlt', '2M');
Результат все тот же: не индексируется проапдэйченный контент, хоть тресни.
Когда грохаешь индекс и строешь его снова, то все ОК. Но фишка то в том, что он должен бы транзакцинонный, standalone индексы-то работают.

Автор: onsh76 15.2.2006, 11:02
Сам тему создал - сам себе и отвечаю. smile

На первый взгляд нет ошибок, все сделано правильно.
Но есть один маленький, но очень важный момент, который был очевиден для меня, но не был описан в деталях выше. Так вот, используемая колонка rep_id в создании rep_mlt индекса и являлась предметом всех траблов, потому как эта колонка одна из физически существующих в таблице и задекларированных в multi-column index-е.
Фрагмент из руководства по Оракл Текст:
Цитата

MULTI_COLUMN_DATASTORE
To index, you must create a dummy column to specify in the CREATE INDEX statement. This column's contents are not made part of the virtual document, unless its name is specified in the columns attribute.

The index is synchronized only when the dummy column is updated. You can create triggers to propagate changes if needed.


Одним словом - RTFM.

Ну а если честно, то поддался я влиянию одного ДБА, который курирует наш проект. Когда я задал ему вопрос почему в руководстве написано MUST create a dummy column, он не смог связно ответить, но заверил что dummy column is not a big deal, в его проектах это было стандартом.
Возможно.
Если не нужна транзакционность. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)