Sql serve A pesquisa de texto completo com Containstable é muito lenta quando usada em JOIN!

Estou usando a pesquisa de texto completo do sql 2008 e estou tendo sérios problemas com o desempenho, dependendo de como eu uso Contains ou ContainsTable.

Aqui está um exemplo: (a tabela 1 possui cerca de 5.000 registros e existe um índice coberto na tabela1, que possui todos os campos da cláusula where. Tentei simplificar as instruções, perdoe-me se houver problemas de sintaxe.)

Cenário 1:

select * from table1 as t1
where t1.field1=90
and   t1.field2='something'
and   Exists(select top 1 * from containstable(table1,*, 'something') as t2 
where t2.[key]=t1.id)

resultados: 10 segundos (muito lento)

Cenário 2:

select * from table1 as t1
join containstable(table1,*, 'something') as t2 on t2.[key] = t1.id
where t1.field1=90
and   t1.field2='something'

resultados: 10 segundos (muito lento)

Cenário 3:

Declare @tbl Table(id uniqueidentifier primary key)
insert into @tbl select {key] from containstable(table1,*, 'something')

select * from table1 as t1
where t1.field1=90
and   t1.field2='something'
and  Exists(select id from @tbl as tbl where id=req1.id)

resultados: fração de segundo (super rápido)

Em resumo, parece que se eu usar o Containstable em qualquer tipo de associação ou condição de cláusula where de uma instrução select que também tenha outras condições, o desempenho será muito ruim. Além disso, se você olhar para o criador de perfil, o número de leituras do banco de dados vai para o telhado. Mas se eu fizer a pesquisa de texto completo e colocar os resultados em uma variável de tabela e usar essa variável, tudo será super rápido. O número de leituras também é muito menor. Parece em cenários "ruins", de alguma forma ele fica preso em um loop, o que faz com que seja lido muitas vezes no banco de dados, mas é claro que eu não entendo o porquê.

Agora, a questão é, antes de tudo, por que isso está acontecendo? e a segunda pergunta: como são variáveis de tabela escaláveis? e se resultar em milhares de registros? ainda vai ser rápido.

Alguma ideia? obrigado

questionAnswers(3)

yourAnswerToTheQuestion