Otimizao de Dados Alterao de ndices e analise de tempo de resposta
BAURU 2014
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru) I - Para iniciar, desbloqueie o usurio HR e avalie os ndices criados previamente na construo do esquema. Quais ndices foram criados de forma implcita e quais foram criados de forma explcita? (Atividade que pode ser realizada no enterprise manager) Usurio HR estava bloqueado, foi utilizado o comando: ALTER USER HR IDENTIFIED BY ORACLE ACCOUNT UNLOCK;
Figura 1 ndices Enteprise Manager
Aps analisar via Enterprise Manager os ndices para o esquema HR, foi constatado que alguns foram criados de forma implcita a partir da Primary Key da tabela, conforme abaixo: DEPT_ID_PK EMP_EMP_ID_PK JHIST_EMP_ID_ST_DATE_PK JOB_ID_PK LOC_ID_PK REG_ID_PK Porm tambm existem muitos que foram criados de forma explicita, pois percebeu-se que seria necessrio, por conta de algumas tabelas mais acessadas, segue abaixo: DEPT_LOCATION_IX EMP_DEPARTMENT_IX EMP_EMAIL_UK EMP_JOB_IX EMP_MANAGER_IX EMP_NAME_IX JHIST_DEPARTIMENT_IX JHIST_EMPLOYEE_IX JHIST_JOB_IX LOC_CITY_IX LOC_COUNTRY_IX
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru) LOC_STATE_PROVINCE_IX II - Baseado na modelagem descrita acima, elabore e realize as seguintes consultas. Importante antes de iniciar a atividade no SQLPLUS, executar o comando "set timing on" para que possa ter ao final o tempo total de execuo da consulta. Executando o comando SET TIMING ON; para ativar o timer em cada comando sql executado. Figura 2 Comando SET TIMING ON; a) Exibir detalhes de funcionrio com ID 150 ou 160. SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID IN (150,160);
Figura 3 Consulta A Sem Otimizao
Para simularmos a queda de desempenho, exclumos o ndice de Primary Key.
Figura 4 Excluso ndice
Aps a excluso, executamos novamente a consulta. Verificando que no houve queda de desempenho, pois a massa de dados muito baixa.
Figura 5 Consulta A Aps excluso
Foi ento criado ndice, verificando o aumento de desempenho.
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru)
Figura 6 Criao ndice EMP_EMP_ID_PK
Figura 7 Consulta A Com Otimizao
b) Exibir Funcionrios onde o primeiro nome ou sobrenome comea com S. SELECT * FROM EMPLOYEES WHERE FIRST_NAME LIKE 'S%' OR LAST_NAME LIKE 'S%';
Figura 8 Consulta B Sem Otimizao
Excluso de ndice, para anlise de desempenho.
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru)
Figura 9 Excluso ndice EMP_NAME_IX
Execuo da Consulta aps a excluso.
Figura 10 Consulta B Aps Excluso
Criao de ndice para otimizao.
Figura 11 Criao ndice EMP_NAME_IX
Consulta aps criao.
Figura 12 Consulta B Com Otimizao
c) Exibir nome do departamento e o nmero de funcionrios do departamento. SELECT B.DEPARTMENT_NAME, COUNT(A.EMPLOYEE_ID) NUM_EMP FROM EMPLOYEES A INNER JOIN DEPARTMENTS B ON B.DEPARTMENT_ID = A.DEPARTMENT_ID GROUP BY B.DEPARTMENT_NAME;
Figura 13 Consulta C Sem Otimizao
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru) Criao de ndice para otimizao.
Figura 14 Criao ndice DEPT_NAME_IX
Consulta aps criao.
Figura 15 Consulta C Com Otimizao
d) Exibir nome do departamento e o primeiro nome do gerente. SELECT A.DEPARTMENT_NAME, B.FIRST_NAME FROM DEPARTMENTS A INNER JOIN EMPLOYEES B ON B.EMPLOYEE_ID = A.MANAGER_ID ORDER BY A.DEPARTMENT_NAME;
Figura 16 Consulta D Sem Otimizao
Com a criao dos ndices EMP_NAME_IX e DEPT_NAME_IX a consulta houve diferena no desempenho.
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru)
Figura 17 Consulta D Aps criao de ndices
e) Exibir ttulo do trabalho, nome do empregado, e a diferena entre o salrio mximo para a profisso para o salrio do empregado. SELECT * FROM (SELECT B.JOB_ID, B.JOB_TITLE, A.FIRST_NAME || ' ' || A.LAST_NAME NAME_EMP, (B.MAX_SALARY-A.SALARY) DIF_SALARY FROM EMPLOYEES A INNER JOIN JOBS B ON B.JOB_ID = A.JOB_ID) X ORDER BY X.JOB_TITLE, X.NAME_EMP;
Figura 18 Consulta E Sem Otimizao
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru) Criao de ndice para otimizao.
Figura 19 Criao de ndice JOB_TITLE_IX
Figura 20 Consulta E Com Otimizao
f) Exibir detalhes dos departamentos em que o salrio mximo de mais de 10 mil. SELECT A.DEPARTMENT_NAME, C.STREET_ADDRESS, C.CITY, C.STATE_PROVINCE, MAX(B.SALARY) MAX_SALARY FROM DEPARTMENTS A INNER JOIN EMPLOYEES B ON B.DEPARTMENT_ID = A.DEPARTMENT_ID INNER JOIN LOCATIONS C ON C.LOCATION_ID = A.LOCATION_ID GROUP BY A.DEPARTMENT_NAME, C.STREET_ADDRESS, C.CITY, C.STATE_PROVINCE HAVING MAX(B.SALARY) > 10000;
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru)
Figura 21 Consulta F Sem Otimizao
Criao de ndice para otimizao.
Figura 22 Criao ndice LOCATIONS_ADDRESS_IX
Figura 23 Consulta F Com Otimizao
g) Exibir nome do pas, cidade e nmero de departamentos onde departamento tem mais de 5 funcionrios. SELECT A.COUNTRY_NAME,
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru) B.CITY, C.DEPARTMENT_NAME, COUNT(D.EMPLOYEE_ID) AS NUM_EMP FROM COUNTRIES A INNER JOIN LOCATIONS B ON B.COUNTRY_ID = A.COUNTRY_ID INNER JOIN DEPARTMENTS C ON C.LOCATION_ID = B.LOCATION_ID INNER JOIN EMPLOYEES D ON D.DEPARTMENT_ID = C.DEPARTMENT_ID GROUP BY A.COUNTRY_NAME, B.CITY, C.DEPARTMENT_NAME HAVING COUNT(D.EMPLOYEE_ID) > 5;
Figura 24 Consulta G Sem Otimizao
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru) Criao de ndice para otimizao.
Figura 25 Criao ndice COUNTRIES_NAME_IX
Figura 26 Consulta G Com Otimizao
h) Elabore uma consulta em que sejam realizadas junes (JOINS) de ao menos 3 tabelas. SELECT A.FIRST_NAME || ' ' || A.LAST_NAME NAME_EMP, A.SALARY, B.DEPARTMENT_NAME, C.JOB_TITLE, NVL(E.FIRST_NAME || ' ' || E.LAST_NAME,'') NAME_MAN, D.STREET_ADDRESS, D.POSTAL_CODE, D.CITY, F.COUNTRY_NAME FROM EMPLOYEES A INNER JOIN DEPARTMENTS B ON B.DEPARTMENT_ID = A.DEPARTMENT_ID INNER JOIN JOBS C ON C.JOB_ID = A.JOB_ID INNER JOIN LOCATIONS D ON D.LOCATION_ID = B.LOCATION_ID LEFT JOIN EMPLOYEES E ON E.EMPLOYEE_ID = A.MANAGER_ID INNER JOIN COUNTRIES F ON F.COUNTRY_ID = D.COUNTRY_ID; ORDER BY A.FIRST_NAME, A.LAST_NAME;
Alison Kaique Lemes Leite | Rafael Henrique de Faria
Otimizao de Banco de Dados Banco de Dados Noturno (Fatec Bauru)