For example, this query causes optimization problems with #huge_result:
create proc base_proc
as
select *
into #huge_result
from ...
select *
from tab,
#huge_result where ...
You can achieve better performance by using two procedures. When the base_proc procedure calls the select_proc procedure, the optimizer can determine the size of the table:
create proc select_proc
as
select *
from tab, #huge_result where ...
create proc base_proc
as
select *
into #huge_result
from ...
exec select_proc
If the processing for #huge_result requires multiple accesses, joins, or other processes, such as looping with while, creating an index on #huge_result may improve performance. Create the index in base_proc so that it is available when select_proc is optimized.