Sie sind auf Seite 1von 8

DOCUMENTAO SOBRE NDICES

Douglas Martins de Azevedo


Pimentel Consultores

Contedo

1.

INTRODUO...............................................................................................................................2

2.

QUANDO CRIAR UM NDICE ?.................................................................................................2

3.

COMO SABER SE O NDICE EST SENDO UTILIZADO...................................................3

4.

USANDO UM NDICE COM MUITOS CAMPOS....................................................................7

5.

QUANTIDADE IDEAL DE CAMPOS PARA UM NDICE......................................................7

6.

QUE CAMPOS INCLUIR EM UM NDICE...............................................................................7

7.

QUANTIDADE IDEAL DE NDICES PARA UMA TABELA...................................................7

8.

EVITE CONDIES OR..............................................................................................................8

DOCUMENTAO SOBRE NDICES


Douglas Martins de Azevedo
Pimentel Consultores
1. Introduo
Os ndices aumentam a velocidade da seleo do Banco de Dados. Eles consistem de
uma cpia ordenada de certos campos da Tabela.
O ndice primrio sempre criado automaticamente no sistema SAP. Ele consiste dos
campos chave primrios da tabela , e h no mximo um registro na tabela unindo cada
possvel combinao desses campos. Esse tipo de ndice chamado ndice NICO.
Se voc no pode usar o ndice primrio para determinar um resultado da seleo (por
exemplo, a condio WHERE pode no conter alguns campos no ndice primrio), o sistema
pesquisa em toda a tabela. Para prevenir isso, e determinar o resultado da seleo pela
pesquisa ainda em um nmero restrito de registros do Banco de Dados, voc pode criar um
ndice secundrio.
Entretanto, voc no deve definir um ndice para todos os campos possveis na
condio WHERE.
2. Quando criar um ndice ?
A criao de um ndice vivel quando:

Voc quer selecionar entradas na tabela baseadas em campos que no esto


contidos em um ndice, e o tempo de resposta est muito lento.

O campo ou campos do novo ndice secundrio so to selecionados que cada


entrada do ndice correspondem quando muito a 5% do nmero total de entradas
na tabela. Caso contrrio, no vivel a criao de um ndice.

A tabela acessada principalmente para leitura.

3. Como saber se o ndice est sendo utilizado ?


2

DOCUMENTAO SOBRE NDICES


Douglas Martins de Azevedo
Pimentel Consultores
A funo Explain one SQL request do SQL trace mostra quais ndices o sistema est
usando. Voc pode gerar uma lista dos acessos do banco de dados envolvidas na ao
entrando na transao ST05 e escolhendo Trace On -> execute o seu programa -> Trace
Off -> Trace List. Se voc executar a funo Explain SQL na declarao EXEC,
REEXEC, OPEN, REOPEN ou PREPARE, o sistema retorna uma lista contendo o ndice
usado pela busca no Banco de Dados. Caso nenhum ndice estiver sendo usado, verifique
se existe algum ndice que voc poderia usar e tente adaptar seu Select para usar esse
ndice. Caso isso no seja possvel crie o ndice baseado nas informaes j citadas.
Exemplo da funco Explain one SQL request:
Use a transao ST05.

Clique Aqui

DOCUMENTAO SOBRE NDICES


Douglas Martins de Azevedo
Pimentel Consultores

Digite o Select no Formato SQL nativo indicado abaixo:


Para digitar o Select d um <Enter> nessa tela.

DOCUMENTAO SOBRE NDICES


Douglas Martins de Azevedo
Pimentel Consultores
Digite o Select e salve.
Exemplo da busca pelo n da Nota Fiscal da tabela J_1BNFDOC que possui um ndice
que inicia com o campo NFNUM.

Resultado:
5

DOCUMENTAO SOBRE NDICES


Douglas Martins de Azevedo
Pimentel Consultores

ndice usado pelo


select.

O resultado indica que o ndice usado o 002.


O ndice 002 possui os seguintes campos:
NFNUM
PARID
PARVW
BUKRS
BRANCH
CREDAT

N de nota fiscal
Identificao do parceiro (cliente, fornecedor, filial)
Nota fiscal funo parceiro
Empresa
Localidade de negcio
Criar data

4. Usando um ndice com muitos campos


6

DOCUMENTAO SOBRE NDICES


Douglas Martins de Azevedo
Pimentel Consultores
Se um ndice possui vrios campos, voc pode usa-lo mesmo se somente poucos
campos aparecerem na clusula WHERE . A sequncia na qual os campos so
especificados no ndice importante. Voc s pode usar um campo do ndice se todos os
campos anteriores na definio do ndice foram includos na condio WHERE.
Um ndice s suporta critrios de pesquisa que descrevam o valor da pesquisa
positivamente, como EQ ou LIKE. Condies que incluem NE no so suportadas por um
ndice.
5. Quantidade ideal de campos para um ndice
Um ndice deve consistir de poucos campos, e a quantidade de campos que otimiza o
funcionamento do ndice de at quatro campos. Isto porque o ndice tem que ser atualizado
cada vez que voc modificar seus campos em uma operao no banco de dados.
6. Que campos incluir em um ndice ?

Incluir campos que tenham alta seletividade.Em outras palavras, voc precisa
checar a proporo de entradas na tabela que podem ser selecionadas com esse
campo. Quanto menor a proporo , mais seletivo o campo. Voc deve colocar
os campos mais seletivos no incio do ndice.

Se todos os campos no parmetro SELECT esto contidos no ndice, o sistema


no acessa os dados uma segunda vez seguindo o acesso do ndice. Se h
somente alguns poucos campos no parmetro SELECT , voc pode melhorar
significativamente a performance por incluir todos esses campos em um ndice.

Voc no deve incluir um campo em um ndice se seu valor inicial (INITIAL) para
a maioria das entradas da tabela.

7. Quantidade ideal de ndices para uma tabela


No se deve criar mais que cinco ndices para qualquer tabela.
Motivos:

Sempre que voc modifica os campos da tabela que ocorrem no ndice, o prprio
ndice tambm atualizado.

A quantidade de dados aumenta.

O otimizador tem grandes chances de cometer erros por usar o ndice errado.

Se voc est usando mais de um ndice para a tabela , assegure-se de que eles no se
sobrepem ou no se repetem.

8. Evite condies OR
O otimizador geralmente para se a condio WHERE contm uma expresso OR. Em
7

DOCUMENTAO SOBRE NDICES


Douglas Martins de Azevedo
Pimentel Consultores
outras palavras, ele no avalia os campos na expresso OR com referncia ao ndice.
Existe uma exceo para isso: tente reformular as condies contendo uma expresso
OR para um dos campos indexados.
Por exemplo :
Reformule de:
SELECT * FROM SPFLI
WHERE CARRID = LH
AND (CITYFROM = FRANKFURT OR CITYFROM = NEW YORK).
Para:
SELECT * FROM SPFLI
WHERE (CARRID = 'LH' AND CITYFROM = 'FRANKFURT')
OR (CARRID = 'LH' AND CITYFROM = 'NEW YORK' ).
9. Problemas com IS NULL
O valor NULL no armazenado na estrutura de um ndice de alguns bancos de
dados. A conseqncia disso que o ndice no usado para o campo.