Обращение к таблицам USER_OBJECTS и USER_SEGMENTS позволяет уточнить технику реализации индекса типа CTXSYS.CTXRULE. Вот примерно каким в нашем случае будет список логических объектов, возникших в результате выдачи команды CREATE INDEX rules_idx ...:
OBJECT_NAME OBJECT_TYPE ------------------------------ ----------------------- DR$RULES_IDX$I TABLE DR$RULES_IDX$K TABLE DR$RULES_IDX$N TABLE DR$RULES_IDX$R TABLE RULES TABLE DR$RULES_IDX$X INDEX RULES_IDX INDEX SYS_IOT_TOP_53386 INDEX SYS_IOT_TOP_53391 INDEX SYS_LOB0000053383C00006$$ LOB SYS_LOB0000053388C00002$$ LOB
А вот примерно какие появятся структуры хранения:
SEGMENT_NAME SEGMENT_TYPE ------------------------------ ----------------------------- DR$RULES_IDX$X INDEX SYS_C005906 INDEX SYS_IOT_TOP_53386 INDEX SYS_IOT_TOP_53391 INDEX SYS_IL0000053383C00006$$ LOBINDEX SYS_IL0000053388C00002$$ LOBINDEX SYS_LOB0000053383C00006$$ LOBSEGMENT SYS_LOB0000053388C00002$$ LOBSEGMENT DR$RULES_IDX$I TABLE DR$RULES_IDX$R TABLE RULES TABLE
Очевидно, техническая организация индекса типа CTXSYS.CTXRULE почти та же, что и для типа CTXSYS.CONTEXT, то есть это четыре таблицы и необходимые для них служебные структуры. (Почти - потому что в таблице DR$RULES_IDX$I в нашем случае появилось дополнительное поле TOKEN_EXTRA. Дальнейшее изучение предлагается предпринять самостоятельно).
В наборах из нескольких запросов-«правил», подобно нашему случаю, это приводит к чудовищному перерасходу дисковой памяти; очевидно, сама возможность рассчитана на большие наборы.