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:
- SELECT *
FROM DBA_IND_COLUMNS
WHERE COLUMN_NAME = 'LAST_NAME';
- 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;
- 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;
- 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;
- 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