Índices no Oracle Database

Documentos relacionados
Top 5 Tuning. for Oracle and SQL Server

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL

IMPLEMENTAÇÃO DE BANCO DE DADOS

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

NoSQL Apache Cassandra para DBAs. Conceitos básicos que todo DBA deve conhecer sobre Apache Cassandra.

Bancos de Dados IV. Tuning de Bancos de Dados. Rogério Costa

SQL (Tópicos) Structured Query Language

Otimização Em Banco De Dados Oracle Através d o Uso de Views Materializadas

saída durante o runtime Usando Functions de uma Única Linha para Personalizar Relatórios Mostrar as diferenças entre as functions SQL de uma única

Rápida revisão do Modelo Relacional

Oracle Advanced Compression x External Tables (Armazenamento de dados históricos)

Análise e otimização de queries no MySQL. Jeronimo Fagundes da Silva

Administração de Banco de Dados

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

MySql. Introdução a MySQL. Andréa Garcia Trindade

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Banco de Dados I Introdução SQL

Um objeto de estatística contém informações de distribuição de valores de uma ou mais colunas de uma tabela ou view indexada

Manipulação de Dados com SQL

Preparação criar tabela. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 12/11/2018

Administração de Banco de Dados

Oracle Database 12c: Introdução ao SQL Ed. 2

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

ANÁLISE E PROJETO DE BANCO DE DADOS

Organização de Arquivos

Sumário. Capítulo 2 Conceitos Importantes Tópicos Relevantes Instance Base de Dados Conclusão... 37

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL. Carga horária: 32 Horas

modelo introduzido por E. F. Codd Meados da década de 70: protótipos. INGRES (UC Berkeley, 73 77) System R (IBM Research at San Jose, 74 78)

Performance Tuning. O que é, por onde começar e o que fazer? Fábio Prado.

Banco de Dados. Professora: Luciana Faria

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

A linguagem SQL

Bases de Dados. DML Data Manipulation Language Parte 3

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

SQL. Prof. Roger Cristhian Gomes

Introdução à linguagem SQL

BANCO DE DADOS EVER SANTORO

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

[versão para impressão] Link original: comp=24763 Conhecendo o PL/SQL

PARTE I INTRODUÇÃO AO MICROSOFT SQL SERVER Capítulo 1 Visão geral do Microsoft SQL Server

Apresentação Modelo e SQL. André Luiz Montevecchi

Linguagem SQL (Parte II)

Tarefa Orientada 9 Base de Dados Pagamentos

Arquivo. Banco de Dados. Organização dos Arquivos. Banco de Dados. Banco de Dados. Introdução a Computação

EXEMPLO DE FLASHBACK VERSIONS QUERY E FLASHBACK TRANSACTION QUERY

Material Teórico. Procedures, Functions, Exceptions e Triggers. Responsável pelo Conteúdo: Prof. Ms. Alexander Gobbato Albuquerque

Projeto de Banco de Dados

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Prova de Tecnologia da Informação

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

SQL Linguagem de Definição de Dados

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Oracle Database: Fundamentos de SQL e PL/SQL

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Exercício Aula Passada. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Formação em Banco de Dados. Subtítulo

Laboratório de Banco de Dados II Aula 04. Prof. Érick de Souza Carvalho

Revisão de Bancos de Dados

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

ORACLE IN-MEMORY 12c. Vantagens e Cenários de Utilização do Oracle In-Memory 12c. Willian Frasson

Formação de DBAs SQL Server 2008 Parte 1: Introdução

OTIMIZAÇÃO DE CONSULTAS - MYSQL. Prof. Antonio Almeida de Barros Junior

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

As Instruções DML. As Instruções de manipulação de dados(dml) em SQL são representados por: Modificam o estado do banco de dados:

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

SQL. Autor: Renata Viegas

MODELAGEM DE DADOS - INTRODUÇÃO AO SQL: DML. Prof. Angelo Augusto Frozza, M.Sc.

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Treinamento. DBA Oracle 11g. Duração: 120 horas

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

E-BOOK GUIA RÁPIDO DE SQL W W W. T R E I N A W E B.C O M. B R

MODELAGEM DE DADOS -INTRODUÇÃO AO SQL: DML. Prof. Angelo Augusto Frozza, M.Sc.

Linguagem SQL Sub-linguagem DDL

Mercado de Trabalho para DBAs

Banco de Dados II. Aula do dia 10/03. Revisão. SQL Estudado até o dia 03/03/2011

Transcrição:

Índices no Oracle Database Tudo o que você precisa saber sobre eles (em 50 minutos) Fábio Prado

Apresentação

Quem sou eu? Trabalho com TI há 16 anos: 2000/2001: Analista de Suporte; 2001/2007: Analista Sistemas/Desenvolvedor: Desde 2007: DBA; Desde 2009: Instrutor Instrutor dos seguintes cursos em Bancos de Dados: - SQL e PL/SQL; - Administração de Bancos de Dados Oracle; - Tuning (de SQL, PL/SQL e Banco de Dados). Bacharel em Ciências da Computação ão, com MBA e Pós-graduação em Gestão de Projetos;

Quem sou eu? Autor do blog FABIOPRADO.NET (http:// http://); Articulista da revista SQL Magazine e diversos sites e blogs de TI; Certificações e títulos: - Microsoft: MCP, MCSD, MCAD, MCSD.NET, MCDBA, MCTS, MCT e MCPD; - Oracle: Oracle ACE; OCE SQL Tuning; OCE Database Performance Tuning, OCA PL/SQL, OCP Database 10G e 11G.

Introdução

Introdução A apresentação irá abordar as dúvidas mais comuns sobre índices no Oracle Database através de perguntas, respostas e exemplos. abril de 16 2016 Fábio Prado. Todos os direitos reservados. 6

1- O que é mais rápido: FTS ou IS?

1- O que é mais rápido: FTS ou IS? FULL TABLE SCAN Leitura da tabela inteira, do início (1º bloco) ao fim (até a HWM) INDEX SCAN Também conhecido como index lookup, consiste na pesquisa através de valores chaves em estruturas de dados adicionais que podem conter (na maior parte dos índices utilizados) os dados da coluna + ROWID abril de 16 2016 Fábio Prado. Todos os direitos reservados. 8

1- O que é mais rápido: FTS ou IS? abril de 16 2016 Fábio Prado. Todos os direitos reservados. 9

1- O que é mais rápido: FTS ou IS? RESPOSTA = DEPENDE Depende de uma série de fatores, tais como: Tamanho da tabela: Em tabelas pequenas normalmente um FTS é mais rápido. Seletividade da consulta: Para retornar poucos dados (até 4% segundo a Oracle, em colunas com alta cardinalidade) normalmente um IS é mais rápido. abril de 16 2016 Fábio Prado. Todos os direitos reservados. 10

1- O que é mais rápido: FTS ou IS? FTS com custo de 274 executado em 1,47s abril de 16 2016 Fábio Prado. Todos os direitos reservados. 11

1- O que é mais rápido: FTS ou IS? IS com custo de 3 executado em 0,004s Alta seletividade + alta cardinalidade + btree = índice bom Tempo de execução caiu de 1,47s p/ 0,004s (36.750% + rápido) abril de 16 2016 Fábio Prado. Todos os direitos reservados. 12

1- O que é mais rápido: FTS ou IS? IS com custo de 1194 executado em 1,766s Baixa seletividade + baixa cardinalidade + btree = índice ruim Tempo de execução aumentou de 1,47s p/ 1,766s (20% pior) abril de 16 2016 Fábio Prado. Todos os direitos reservados. 13

2- Quando devemos criar índices?

2- Quando devemos criar índices? Índices otimizam consultas, mas degradam a performance de instruções DML (insert, update, delete e merge), portanto, crie-os criteriosamente, seguindo algumas das dicas abaixo: 1. Para otimizar consultas frequentes; 2. Nas colunas da cláusula WHERE, ordenação, agrupamentos e ligações; 3. Em geral, quando a consulta retorna poucas linhas da(s) tabela(s); 4. Em FKs para otimizar joins e DMLs na tabela pai; 5. Quando o SQL não tiver uma cláusula de negação: Exemplos: NOT IN, <>,!=, NOT EXISTS. 6. Quando o filtro não comparar valores nulos (NULL), pois eles não são indexados nos índices mais comuns (B-tree). abril de 16 2016 Fábio Prado. Todos os direitos reservados. 15

3- Quais os tipos de índices existentes e quando devo utilizar cada um deles?

3- Quais os tipos de índices existentes e quando devo utilizar cada um deles? Os índices são subdivididos em 4 grupos: 1. B-tree: Alta cardinalidade; Índices default, também conhecidos como normais, são muito utilizados em ambientes OLTP. abril de 16 2016 Fábio Prado. Todos os direitos reservados. 17

3- Quais os tipos de índices existentes e quando devo utilizar cada um deles? 2. Bitmap: Foi introduzido no Oracle 7.3 e só pode ser criado na versão Enterprise Edition; Mais indicado para baixa cardinalidade e ambientes onde não há alta concorrência de gravações; Podem ser utilizados para comparações com NULL e são muito utilizados em ambientes OLAP. abril de 16 2016 Fábio Prado. Todos os direitos reservados. 18

3- Quais os tipos de índices existentes e quando devo utilizar cada um deles? 3. Function Based: Foi introduzido no Oracle 8i e pode ser btree ou bitmap; Deve ser criado quando for necessário usar função(es) na(s) coluna(s) do(s) filtro(s). abril de 16 2016 Fábio Prado. Todos os direitos reservados. 19

3- Quais os tipos de índices existentes e quando devo utilizar cada um deles? 4. Application Domain: Índices especializados para otimizar consultas mais complexas; Exemplos: Oracle Text e Oracle Spatial. abril de 16 2016 Fábio Prado. Todos os direitos reservados. 20

4- Criei um índice, porque ela não está sendo utilizado?

4- Criei um índice, porque ele não está sendo utilizado? a) A tabela é pequena: A tabela TAB_NF contém somente 2 linhas abril de 16 2016 Fábio Prado. Todos os direitos reservados. 22

4- Criei um índice, porque ele não está sendo utilizado? b) O(s) objeto(s) possui(em) estatística(s) desatualizada(s): abril de 16 2016 Fábio Prado. Todos os direitos reservados. 23

4- Criei um índice, porque ele não está sendo utilizado? b) O(s) objeto(s) possui(em) estatística(s) desatualizada(s): Após coletar estatísticas o índice passou a ser utilizado abril de 16 2016 Fábio Prado. Todos os direitos reservados. 24

4- Criei um índice, porque ele não está sendo utilizado? c) Existe alguma conversão implícita/explícita no SQL: abril de 16 2016 Fábio Prado. Todos os direitos reservados. 25

4- Criei um índice, porque ele não está sendo utilizado? c) Existe alguma conversão implícita/explícita no SQL: abril de 16 2016 Fábio Prado. Todos os direitos reservados. 26

4- Criei um índice, porque ele não está sendo utilizado? d) O índice possui um alto fator de clusterização: Tabela ordenada alfabeticamente Tabela sem ordenação abril de 16 2016 Fábio Prado. Todos os direitos reservados. 27

4- Criei um índice, porque ele não está sendo utilizado? d) O índice possui um alto fator de clusterização: Índices possuem mesma qtde. de blocos e linhas Somente ORGANIZED_IDX possui baixo fator de clusterização Fonte: On Clustering Factor and Validating Keys, Tom Kyte Link: http://www.oracle.com/technetwork/issue-archive/2012/12-sep/o52asktom-1735913.html, acessado em 01/04/2016 17:40h abril de 16 2016 Fábio Prado. Todos os direitos reservados. 28

4- Criei um índice, porque ele não está sendo utilizado? e) Índice ineficiente. Ex.: Btree criado em coluna com baixa cardinalidade: Coluna vl_nf possui baixa cardinalidade abril de 16 2016 Fábio Prado. Todos os direitos reservados. 29

5- Posso forçar o uso de um índice?

5- Posso forçar o uso de um índice? Sim, você pode forçar o uso de índices, mas tenha CUIDADO: você poderá estar forçando o uso de um índice ineficiente; Para usá-los, ao invés de utilizar um hint INDEX, utilize alguma das opções abaixo: ALTER SESSION SET OPTIMIZER_MODE=FIRST_ROWS; Hint FIRST_ROWS. Na configuração padrão do parâm OPTIMIZER_MODE, alguns índices bons podem ser ignorados. Obs.: Se isso não for suficiente altere o valor de outros parâmetros que influenciam o comportamento do otimizador. Ex.: OPTIMIZER_INDEX_COST_ADJ. abril de 16 2016 Fábio Prado. Todos os direitos reservados. 31

5- Posso forçar o uso de um índice? Índice ineficiente abril de 16 2016 Fábio Prado. Todos os direitos reservados. 32

6- Quando devemos reconstruir índices?

6- Quando devemos reconstruir índices? abril de 16 2016 Fábio Prado. Todos os direitos reservados. 34

6- Quando devemos reconstruir índices? abril de 16 2016 Fábio Prado. Todos os direitos reservados. 35

Referências - Expert Indexing in Oracle Database 11G - Bill Padfield, Darl Kuhn, Ignatius Fernandez, Sam Alapati - Apress; - Expert Oracle Database Architecture - Thomas Kyte - Apress - Treinamento SQL Tuning FABIOPRADO.NET abril de 16 2016 Fábio Prado. Todos os direitos reservados. 36

FIM contato@fabioprado.net