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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo