No SQL Server 2008 R2, tenho uma consulta que se parece com
create stored procedure give_me_art @filter varchar(15),@skl_id int
begin
select
id,naziv,sifra,isnull(lager.kolicina,0) as lager
from art
left outer join lager on art.id=lager.art_id and lager.skl_id=@skl_id
where sifra like '%'+@filter+'%' or naziv like '%'+@filter+'
end
Eu tenho um índice na coluna naziv e na coluna sifra.
Estou pensando em mudar esta consulta para pesquisa de texto completo. Table art tem cerca de 150K registros e meu principal objetivo é obter uma resposta mais rápida do SQL Server, pois essa consulta é comum no dia a dia.
Se eu criar um índice de texto completo nessas duas colunas e redesenhar minha consulta para usar o índice de texto completo, o que acontecerá com o desempenho dessa consulta?
Em grande parte, vai depender se @filter é uma palavra ou um grupo de palavras. Os índices de texto completo basicamente dividem o conteúdo da coluna em palavras individuais e permitem que você pesquise uma palavra (grupo de palavras) ou um sinônimo, etc. mas você pode muito bem ver algum aumento de desempenho, novamente dependendo do que @filter é. Eu também verificaria o restante de seus índices. Por exemplo, um em art.id e outro em lager.art_id e lager.skl_id. Dado também o número de colunas que você está retornando (supondo que esse seja o caso na consulta real, não apenas neste exemplo), você pode considerar fazê-las abrangendo índices "incluindo" (veja a palavra-chave INCLUDE em CREATE INDEX) os campos extras em seu índices.