Introdução ao Índice Oracle interMedia Text

1 Introdução

 

     O recurso Oracle interMedia Text representa uma tecnologia utilizada para permitir a criação de índices sobre campos texto (como VARCHAR2, CHAR e CLOB). Este tipo de índice especial foi introduzido a partir da versão 8i do SGBD Oracle. Uma de suas características mais atraentes está no fato de que eles podem ser utilizados através do emprego de consultas SQL padrão. Este artigo possui o objetivo de apresentar uma breve introdução sobre as características e aplicações deste poderoso recurso do Oracle.

2 interMedia – Por que Utilizar?

 

      Para apresentar as vantagens da utilização dos índices interMedia, será apresentado um exemplo. Imagine que uma grande empresa que presta serviços help desk de informática, possui um sistema centralizado que é responsável por armazenar informações históricas a respeito de todos os atendimentos realizados por seus técnicos. Considere que este sistema utilize o SGBD Oracle e que os técnicos da empresa atendam a dezenas de chamados diariamente. Para cada atendimento efetuado, o técnico responsável deve utilizar o sistema com o objetivo de registrar diversas informações, como a hora e local do atendimento, o tipo de atendimento (problema de software ou hardware) e também uma descrição das ações que realizou com o intuito de corrigir os problemas apresentados pelo microcomputador. Neste exemplo, suponha que no banco Oracle a tabela responsável por armazenar os dados de cada atendimento se chame T_ATENDIMENTO. Considere ainda que o campo responsável por armazenar a descrição do atendimento nesta tabela tenha o nome de DSC_ATENDIMENTO e seja do tipo VARCHAR2(4000).

      Considere agora que um gerente da empresa help desk esteja interessado em realizar um estudo a respeito dos atendimentos efetuados com o intuito de corrigir problemas causados por vírus de computadores. No caso do sistema deste exemplo, a única possibilidade do gerente descobrir esta informação seria através de uma pesquisa por palavras como “vírus” e “antivírus” no campo DSC_ATENDIMENTOA maneira comum de realizar esta consulta seria através de uma instrução SQL com o uso do operador LIKE, conforme indicado a seguir:

 

   SELECT * FROM T_ATENDIMENTO

   WHERE DSC_ATENDIMENTO LIKE ‘%VIRUS%’;

 

        O emprego desta instrução possui alguns problemas. Este comando força uma varredura completa sobre a tabela T_ATENDIMENTO (full scan). Ou seja, se a tabela contiver 500.000 registros, é necessário percorrer cada um destes 500.000 registros de atendimento, examinando o conteúdo do campo DSC_ATENDIMENTO para verificar se a palavra VIRUS está escrita em alguma posição deste campo. Conseqüentemente, o tempo para a execução da consulta seria longo.

         Muitas aplicações atuais exigem consultas on-line (rápidas) sobre informações armazenadas em campos texto. Conforme vimos no exemplo anterior, tem-se que a utilização do operador LIKE para resolver este tipo de problema pode ser inviável. A solução oferecida pela Oracle é a utilização de índices interMedia Text. Este tipo de objeto representa um índice especial que funciona de maneira similar a um índice remissivo de um livro, conforme ilustra Figura 1. Através desta estrutura, o Oracle consegue localizar qualquer palavra de maneira imediata (ou seja, utilizando um número reduzido de acessos). Observe que cada palavra contida no índice está associada a uma lista. Esta lista contém os ROWID’s dos registros que possuem ocorrências da palavra.

interMedia.jpg

Figura 1 Índice remissivo de palavras

       Para que seja possível criar um índice interMedia é necessário especificar a tabela e coluna que serão indexadas. Um índice interMedia é criado com o uso do comando CREATE INDEX, o mesmo utilizado para a criação de índices convencionais. No entanto, trata-se de um índice especial, que o Oracle classifica como  índice do tipo context. O comando a seguir ilustra um exemplo de sintaxe que pode ser utilizada para a criação de um índice interMedia:

 

   CREATE INDEX DSC_ATENDIMENTO_IDX

   ON T_ATENDIMENTO.DSC_ATENDIMENTO

   INDEXTYPE IS CTXSYS.CONTEXT;

 

      Neste exemplo DSC_ATENDIMENTO_IDX representa o nome do índice criado, enquanto T_ATENDIMENTO.DSC_ATENDIMENTO indicam, respectivamente, o nome da tabela e o nome do campo que será indexado. A última linha é requerida para informar ao Oracle que o índice a ser criado deve ser do tipo context (ou seja, interMedia Text).

      A pesquisa por palavras num campo indexado através do interMedia é realizada através do comando SELECT em conjunto com o operador CONTAINS. O exemplo a seguir ilustra uma consulta SQL que seria capaz de retornar todos os registros da tabela T_ATENDIMENTO que contivessem as palavras "VIRUS" ou "ANTIVIRUS" no campo DSC_ATENDIMENTO.

 

   SELECT * FROM T_ATENDIMENTO

   WHERE CONTAINS(DSC_ATENDIMENTO,’VIRUS or ANTIVIRUS’) > 0;

 

         O operador CONTAINS deve sempre ser seguido da condição “> 0”,  que indica ao Oracle que apenas os registros com score maior do que zero devem ser retornados pela consulta. Maiores informações a respeito das características deste score serão apresentadas num próximo artigo. O operador CONTAINS requer que sejam especificadas a coluna indexada (DSC_ATENDIMENTO) e a lista de palavras que devem ser procuradas (‘VIRUS’ ou "ANTIVIRUS"). Note que operadores lógicos como AND, OR e NOT podem ser utilizados para viabilizar a procura de várias palavras ao mesmo tempo.

         É claro que o uso de índices interMedia também tem as suas desvantagens. Em primeiro lugar, estes índices ocupam muito espaço em disco, pois precisam armazenar uma cópia de todas as palavras distintas que sejam encontradas no campo indexado e ainda ponteiros para facilitar a localização destas palavras na tabela. Outra desvantagem está no fato de que os índices não são atualizados automaticamente sempre que existe uma inserção, exclusão ou atualização em dados da tabela na qual estão vinculados. É necessário executar rotinas de manutenção sobre o índice interMedia para que as atualizações da tabela possam ser identificadas por ele.         

3 Conclusões

             

      Este artigo apresentou uma breve introdução aos índices interMedia Text do Oracle que viabilizam a busca rápida por palavras ou frases em campos do tipo VARCHAR2, CHAR e CLOB. Em artigos futuros as principais características desta tecnologia serão discutidas de forma mais detalhada. Serão abordados tópicos como:

   - manutenção dos índices interMedia. 

   - diferentes tipos de consulta que podem ser realizados. 

   - diferentes configurações que podem ser atribuídas aos índices interMedia.

 

   Até breve!!!