Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mateushim

filtro por string, como aumentar performace?

Recommended Posts

Olá galera

 

estou com um grande problema.

tenho uma view e estou fazendo um filtro por string, só que está muito lento, alguem sabe como aumentar a performace?

 

exemplo prático do código:

 

select * from view_teste where nome='mateushim'

 

 

vlw

at+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou um indice

 

create index nome_indice on tabela ([nome])

 

 

 

select * from view_teste (index=nome_indice nolock) where nome='mateushim'

 

na view o nome é formado pela concatenação de 2 campos de tabelas diferentes que já possuem indice.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, esqueci de completar sobre ser os indices na view..

 

Não sei sua estrutura de dados, mas uma ideia seria separar os campos pelo seus respectivos indices e usar temporarias para deixar a tabela menor

e ai sim criar tudo em execução um campo concatenado.

 

Jogue para dentro de uma temporaria tudo com um insert/select * tabela (indice) where campo='valor' e tentar com duas tabelas menores

 

Ou invés de selecionar, deletar <> 'VALOR' dentro de uma tempoaria, o SQL trata um pouco mais rapido.

 

Só estou te dando idéias, porque já fiz melhora de performace assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fez o plano de execução da query da view ?

 

O que ele faz ?

 

O BD tem estatisticas atualizadas ?

 

O fato de uma coluna ter índice não quer dizer que o otimizador de consultas use-o.

Exemplo, índice por SEXO , tabela de 5.000.000 de registros, 50% de distribuição para

cada sexo, o otimizador vai ver que o FULL SCAN é "mais barato".

 

SELECT NOME,DATANASC
FROM TABELA
WHERE SEXO = 'F'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça utilizando like

select * from view_teste where nome like '%mateushim'

fica mais rápido. Se você utilizar % a frente da palavra ele busca pela palavra exata.

 

Outra coisa importante. Crie indexação para esta tabela em sua base. Se for um grande volume de dados é interessante utilizar o PAD_INDEX = ON com um percentual especificado no FILLFACTOR. O que não foi o meu caso no exemplo abaixo. Importante também usar índices clusterizados dependendo da situação.

ALTER TABLE [dbo].[EntradaEstoque] ADD PRIMARY KEY CLUSTERED 
(
[cd_empresa] ASC,
[cd_filial] ASC,
[nr_lote] ASC,
[nr_linha] ASC,
[cd_produto] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.