Artigo da SQL Magazine 28 - Index Tuning Wizard

Artigo publicado na Revista SQL Magazine - Edição 28.

Clique aqui para ler esse artigo em PDF.

 

 

Clique aqui para ler todos os artigos desta edição

 

Index Tuning Wizard

Valide, drope ou crie novos índices com a ferramenta de tuning da Microsoft

Paulo Ribeiro

Grande parte dos problemas de desempenho se deve à inexistência de índices adequados para as queries. Mas o que vem a ser um “índice adequado”? Um bom índice deve reduzir o volume de I/O necessário para execução da query. Um bom índice deve também “ajudar mais” do que “atrapalhar”, sendo efetivamente utilizado pelas queries.

O objetivo dessa matéria será apresentar ao leitor o Index Tuning Wizard, ferramenta embutida no SQL Server 2000 para análise de queries, cujo propósito é recomendar a criação ou exclusão de índices para otimização de performance.

Um bom índice é...

Conhecem aquele ditado: um é bom, dois é ótimo, mas três pode ser demais? Pois bem, uma tabela sem índices é péssima, mas a abundância de índices pode não ser um bom negócio -  principalmente se os índices não são utilizados.

Índices e estatísticas foram discutidos nas edições 9 e 10 (“Estatísticas de Distribuição de Dados no SQL Server” e “Entendendo e Utilizando Índices na Otimização de Queries”); faremos aqui apenas um exemplo prático.

Exemplo prático de tuning envolvendo a criação de índice

Os índices da tabela Orders, localizada no database Northwind, encontram-se na Listagem 1. Repare no índice em destaque ix_EmployeeId, criado sobre a coluna de EmployeeId.

 

Listagem 1. Indices existentes na tabela Orders.

use NorthWind

go

exec sp_helpindex orders

go

 

-----------------------------------------------------------------------------------------

index_name   index_descriptionindex_keys

---------------------------------------------------------------------------

ix_CustomerIDnonclustered located on PRIMARYCustomerID

ix_EmployeeIDnonclustered located on PRIMARYEmployeeID

ix_OrderDatenonclustered located on PRIMARYOrderDate

PK_Ordersclustered, unique, primary key located on PRIMARYOrderID

ix_ShippedDatenonclustered located on PRIMARYShippedDate

ix_ShippersOrdersnonclustered located on PRIMARYShipVia

ix_ShipPostalCodenonclustered located on PRIMARYShipPostalCode

 

 O comando SELECT da Listagem 2 está filtrando os clientes cujos pedidos foram atendidos pelo empregado de código 4. Note que o índice ix_EmployeeId não está sendo utilizado, fato que pode ser confirmado pelo processo de scan ( varredura seqüencial) no índice cluster.

 

Listagem 2. SELECT com clustered index scan na tabela Orders.

set showplan_text on

set statistics_io on

go

select employeeId, customerId

from orders

where employeeid=4

go

---------------------------------------------------------------------------------------------------" [...] continue lendo...

Artigos relacionados