I have the following stored procedure being called by an application and MS SQL Server Profiler confirms it as running 180,000 reads on the database which is way too many.Can anyone suggest an alternative script/stored procedure that would do the same job but more efficiently and with less reads?I'm happy to create a table to dump the initial data in but what syntax to use to do that?SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[GetSourceInvestigations](@ID int)ASBEGINWITH Results (ID, SourceID, OriginalID, TransferReason, [Level])AS( SELECT ID, NULL, ID, TRANSFER_REASON, 0 AS [Level] FROM tblREFERRALS WHERE TRANSFER_REASON = 1 AND SOURCE_ID IS NULL UNION ALL SELECT ID, SOURCE_ID, Results.OriginalID, TransferReason, [Level] + 1 FROM tblMAIN_REFERRALS JOIN Results ON Results.ID = tblREFERRALS.SOURCE_ID)SELECT *FROM Results JOIN vwIMAGING_SUMMARY_TRANSFERS ist ON Results.ID = ist.IDLEFT JOIN tblREFERRALS mrON Results.ID = mr.IDWHERE OriginalID = (SELECT OriginalID FROM Results WHERE ID = @ID) ANDID < @IDORDER BY [Date Performed] DESC END