Considere a tabela EMPREGADOS definida abaixo em SQL.
Create table EMPREGADOS
(CODEMP INT PRIMARY KEY,
NOMEEMP VARCHAR(300) NOT NULL UNIQUE,
FUNCAO INT CHECK(FUNCAO BETWEEN 1 AND 5),
SALARIO FLOAT NOT NULL,
DEPTO INT NOT NULL);
Sobre esta tabela, foi definido um índice primário (codemp – chave primária), e dois índices secundários, um sobre nomeemp, e outro sobre funcao.
Uma pessoa do desenvolvimento reclamou à DBA que algumas de suas consultas sobre essa tabela estavam muito demoradas, e pediu apoio para melhoria do desempenho. A DBA examinou o plano de execução das consultas e, em vez de uma solução sobre o esquema da base de dados, sugeriu a reescrita das consultas.
ORIGINAL
REESCRITA
I.
SELECT NOMEEMP, FUNCAO, DEPTO
FROM EMPREGADOS
WHERE SUBSTR(NOMEEMP, 1, 5) =
'MARIA';
SELECT NOMEEMP, FUNCAO, DEPTO
FROM EMPREGADOS
WHERE NOMEEMP LIKE 'MARIA%';
II.
SELECT NOMEEMP
FROM EMPREGADOS
WHERE FUNCAO <> 5;
SELECT NOMEEMP
FROM EMPREGADOS
WHERE FUNCAO BETWEEN 1 and 4;
III.
SELECT DISTINCT NOMEEMP, SALARIO,
DEPTO
FROM EMPREGADOS
WHERE FUNCAO = 1;
SELECT NOMEEMP, SALARIO, DEPTO
FROM EMPREGADOS
WHERE FUNCAO = 1
Qual, dentre as consultas reescritas, melhorou o desempenho da consulta original porque resultou, no plano de consulta, em uma operação (mais eficiente) sobre um índice?
Apenas I.
Apenas II.
Apenas III.
Apenas I e II.
I, II e III.