Текст Oracle 11g: составной индекс домена — FILTER BY для столбцов из разных таблиц

Я использую текст Oracle 11g,

AuthorTable: (таблица сведений об авторе) AuthorId, AuthorName, AuthorDOB

ArticleTable : (таблица содержания статей) ArticleId, WrittenDate, PublishDate, ARTICLE_TXT (CLOB)

LocationTable : (таблица для Location) LocationId, LocationState, LocationCity

ArticleAuthorAssocTable: (таблица для ассоциации Article-Author) AuthorId, ArticleId

LocAuthorAssocTable: (таблица для сопоставления автора и местоположения) AuthorId, LocationId, LocationStartDate, LocationEndDate.

Мой запрос должен искать любой входной поисковый запрос в ARTICLE_TXT вместе с любым другим запросом в диапазоне PublishDate / WrittenDate / AuthorDOB / LocationCity / LocationStartDate.

Поскольку мне нужно выполнить смешанный запрос, я начал создавать CDI Composite Domain Index для ArticleTable.

    CREATE INDEX ARTICLE_TXT_CDI_IDX ON ArticleTable(ARTICLE_TXT) 
    INDEXTYPE IS ctxsys.CONTEXT 
    FILTER BY WrittenDate, PublishDate

и запрос как

SELECT 

/*+ domain_index_sort domain_index_filter(ARTICLE_TXT_CDI_IDX) */      article.ARTICLE_TXT, 

author.AuthorName , article.WrittenDate, article.PublishDate, LocationTable.LocationCity ,location.LocationStartDate, location.LocationEndDate 

FROM 

  ArticleTable article

  INNER JOIN 
  ArticleAuthorAssocTable  articleAuthorAssoc ON article.articleId = articleAuthorAssoc .articleId 

  INNER JOIN 
  AuthorTable author ON author.authorId= articleAuthorAssoc.authorId

  INNER JOIN 
  LocAuthorAssocTable locAuthorAssoc req ON author.authorId = locAuthorAssoc.authorId

INNER JOIN 
  LocationTable location ON location .authorId = locAuthorAssoc.authorId

WHERE

 CONTAINS(article.ARTICLE_TXT, 'Something') >0

 AND author.AuthorDOB BETWEEN TO_DATE('01/01/2001','MM/DD/YYYY') 
AND TO_DATE('12/31/2012','MM/DD/YYYY')

 AND location.LocationId IN (1,2)

Теперь мои вопросы:

  1. Можно ли создать составной индекс домена с FILTER BY для столбцов из разных таблиц?
  2. Есть ли другой способ улучшить приведенный выше запрос?

Из моих исследований некоторые варианты используют материализованное представление, индекс на основе функций, USER_DATASTORE.

Но, к сожалению, до сих пор не знаю, как их использовать... Пожалуйста, помогите мне своими знаниями.

Спасибо


person Priya    schedule 09.05.2012    source источник


Ответы (1)


Я думаю, что лучшим решением этой проблемы является добавление XML-столбца в ArticleTable, в котором вы объединяете всю необходимую информацию о статье.

Затем вам нужно добавить триггеры в задействованные таблицы, чтобы воссоздать этот xml при изменении данных.

Таким образом, вы можете индексировать этот столбец xml и искать очень конкретную информацию, используя группы разделов (например, «PATH_SECTION_GROUP»).

person Roeland Van Heddegem    schedule 17.10.2013