sure so my approach is I first check the execution plan that which actually tells us okay this query is taking a lot of time then I will try to analyze that query I will check on the number of joins that query has and what is the conditions they are using so I will first check on the column conditions that they are using if the indexes are present or not then maybe I will check the joins that are there in that query if those tables are having a huge amount of data then I would split that single query into multiple queries so whenever there are joins it it will be joined with a filter data set not with the entire content of that data which might give performance issues in case if there are a lot of records in certain tables that are there in that adjoining tables then if a table variable is getting used I will replace that with temporary tables because table variables gives a lot of performance impact compared to temporary tables and if a single stored procedure as per me if a single stored procedure has a lot of queries it can become complex for developer also to understand in future if they have to make changes I might split that stored procedure also into multiple stored procedures and I will call those stored procedures from a single stored procedure again on filtered data set so that will also give performance benefits and then again I will go on checking the execution plan and check if the optimization is working fine or not then I will further go ahead like if I can add some CTEs that will give some performance benefits