Array
(
)

Indices em Tabela

Foxcyber
   - 06 abr 2005

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


Emerson
   - 06 abr 2005

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).

#Código

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



Marcus.magalhaes
   - 26 abr 2005

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,