sql server查询问题

一个查询(select * from a),返回1100行数据,执行时间是不到一秒。我在这个查询后面增加了两个inner join,类似:
select * from (select * from a) a
inner join b on ...
inner join c on ...;
这两个inner join不会影响返回的行数。但是这个查询跑了2分半多。
我把select * from a这个做成视图,或者改成cte,时间都是2分半多。

但是,如果让它生成一个临时表,查询时间就又是不到一秒了。
类似:
select * into #t from a;
select * from #t a
inner join b ...
inner join c ..;.
drop table #t;

执行计划里建议加两个非聚集索引,加上以后,执行时间优化到3秒,但还是不如临时表快。
这是什么原因?

inner join 关联的时候,on关联的字段最好有索引