Indices em Tabela

06/04/2005

0

Tenho uma tabela de um cliente que não foi feita por mim que tem em média 7 milhões de registros. E a tabela para ser consultada é super lenta, as vezes nem retorna a resposta. Ela não possuí nenhum índice. Será que; se eu colocar um índice nessa tabela a performance de pesquisa nela vai aumentar? Qual seria a melhor forma de criar um índice? Vcs podem me explicar como fazer isso? Obrigado. Aguardo respostas...


Foxcyber

Foxcyber

Responder

Posts

06/04/2005

Emerson Nascimento

com certeza a performance aumentará absurdamente.

você deve criar índices para todos os campos utilizados em relacionamento de tabelas e todos aqueles utilizados em critérios de pesquisa (where). geralmente clientes são ´procurados´ pelo cnpj, razao social ou nome fantasia, cidade e bairro.

no caso acima, deveriam ser criados pelo menos 4 índices (fora a chave primária).

if not exists(select * from dbo.sysindexes where id = object_id(N´[dbo].[Clientes]´) and name=´PK_Clientes´)
  ALTER TABLE [dbo].[Clientes] WITH NOCHECK ADD 
CONSTRAINT [PK_Clientes] PRIMARY KEY  CLUSTERED 
(
                [ID]
) WITH  FILLFACTOR = 90  ON [PRIMARY] 
GO

if not exists(select * from dbo.sysindexes where id = object_id(N´[dbo].[Clientes]´) and name=´IX_Clientes_Cnpj´)
  ALTER TABLE [dbo].[Clientes] WITH NOCHECK ADD 
CONSTRAINT [IX_Clientes_Cnpj] UNIQUE CLUSTERED 
(
                [CNPJ]
) ON [PRIMARY] 
GO

if not exists(select * from dbo.sysindexes where id = object_id(N´[dbo].[Clientes]´) and name=´IX_Clientes_Razao´)
  ALTER TABLE [dbo].[Clientes] WITH NOCHECK ADD 
CONSTRAINT [IX_Clientes_Razao] CLUSTERED
(
                [RAZAOSOCIAL]
) ON [PRIMARY] 
GO

if not exists(select * from dbo.sysindexes where id = object_id(N´[dbo].[Clientes]´) and name=´IX_Clientes_Fantasia´)
  ALTER TABLE [dbo].[Clientes] WITH NOCHECK ADD 
CONSTRAINT [IX_Clientes_Fantasia] CLUSTERED
(
                [NOMEFANTASIA]
) ON [PRIMARY] 
GO

if not exists(select * from dbo.sysindexes where id = object_id(N´[dbo].[Clientes]´) and name=´IX_Clientes_Local´)
  ALTER TABLE [dbo].[Clientes] WITH NOCHECK ADD 
CONSTRAINT [IX_Clientes_Local] CLUSTERED
(
                [BAIRRO],
                [CIDADE],
                [UF]
) ON [PRIMARY] 
GO



Responder

26/04/2005

Marcus.magalhaes

Boa noite.

Me parece que houve um pequeno engano no post acima.

Vc só pode ter 1 índice clustered, todos outros devem ser nonclustered. Portando uma vez criado o mesmo na PK, todos os outros CLUSTERED devem ser trocados por NONCLUSTERED.

Att,


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar