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
Curtir tópico
+ 0
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).
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,
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
Clique aqui para fazer login e interagir na Comunidade :)