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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar