///
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 |
|---|---|
| SELECT NOMEEMP, FUNCAO, DEPTO FROM EMPREGADOS WHERE SUBSTR(NOMEEMP, 1, 5) = 'MARIA'; | SELECT NOMEEMP, FUNCAO, DEPTO FROM EMPREGADOS WHERE NOMEEMP LIKE 'MARIA%'; |
| SELECT NOMEEMP FROM EMPREGADOS WHERE FUNCAO <> 5; | SELECT NOMEEMP FROM EMPREGADOS WHERE FUNCAO BETWEEN 1 and 4; |
| 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?