FC ConcursosFC Concursos

Questão FC369464

João, administrador de Banco de Dados experiente, percebeu que muitas consultas geradas por relatórios precisam fazer filtros pelo campo "LAST_NAME". No entanto, notou um desempenh

Linguagem SQL

FGV · 2024

João, administrador de Banco de Dados experiente, percebeu que muitas consultas geradas por relatórios precisam fazer filtros pelo campo "LAST_NAME". No entanto, notou um desempenho insatisfatório devido à ausência de índices nesse campo, resultando em operações de FULL TABLE SCAN e impactando negativamente o tempo de resposta das consultas. Para resolver esse problema, ele decide identificar todas as tabelas com ausências de índices na coluna "LAST_NAME" do banco de dados, independentemente do proprietário.

 

Para isso, João deverá executar o script:

  1. SELECT *

      FROM DBA_IND_COLUMNS

      WHERE COLUMN_NAME = 'LAST_NAME';

  2. SELECT C.OWNER, C.TABLE_NAME

      FROM DBA_TAB_COLUMNS C

      LEFT JOIN DBA_IND_COLUMNS I ON I.TABLE_OWNER =

      C.OWNER AND I.TABLE_NAME = C.TABLE_NAME AND

      I.COLUMN_NAME = C.COLUMN_NAME

      WHERE C.COLUMN_NAME = 'LAST_NAME' AND

      I.INDEX_NAME IS NULL;

  3. SELECT C.TABLE_NAME

      FROM USER_TAB_COLUMNS C

      LEFT JOIN USER_IND_COLUMNS I ON I.TABLE_NAME =

      C.TABLE_NAME AND I.COLUMN_NAME = C.COLUMN_NAME

      WHERE C.COLUMN_NAME = 'LAST_NAME' AND

      I.INDEX_NAME IS NULL;

  4. SELECT C.OWNER, C.TABLE_NAME

      FROM ORA_COLUMNS C

      LEFT JOIN ORA_IND_COLUMNS I ON I.TABLE_OWNER =

      C.OWNER AND I.TABLE_NAME = C.TABLE_NAME AND

      I.COLUMN_NAME = C.COLUMN_NAME

      WHERE C.COLUMN_NAME = 'LAST_NAME' AND

      I.INDEX_NAME IS NULL;

  5. SELECT C.OWNER, C.TABLE_NAME

      FROM DBA_TAB_COLUMNS C

      LEFT JOIN DBA_IND_COLUMNS I ON I.TABLE_OWNER =

      C.OWNER AND I.TABLE_NAME = C.TABLE_NAME AND

      I.COLUMN_NAME = C.COLUMN_NAME

      WHERE C.COLUMN_NAME = 'LAST_NAME' AND

      I.INDEX_NAME IS NOT NULL;

Mostrar resposta e comentário

Gabarito

B

Comentário do professor

A consulta proposta usa a visão DBA_TAB_COLUMNS para localizar todas as colunas chamadas LAST_NAME em todo o banco (ou seja, independentemente do proprietário) e retorna o par OWNER, TABLE_NAME para identificar o schema e a tabela.

Em seguida, faz um LEFT JOIN com a visão DBA_IND_COLUMNS, relacionando TABLE_OWNER, TABLE_NAME e COLUMN_NAME, de modo a tentar encontrar um índice que cubra cada ocorrência de LAST_NAME.

A cláusula I.INDEX_NAME IS NULL no WHERE filtra exatamente os casos em que não existe índice associado à coluna — resultado obtido justamente quando o LEFT JOIN não encontrou correspondência. Assim, a consulta lista as tabelas/owners cuja coluna LAST_NAME está sem índice, permitindo ao DBA planejar a criação de índices e reduzir FULL TABLE SCAN e o tempo de resposta.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo