Link to home
Start Free TrialLog in
Avatar of fippif
fippif

asked on

linq to sql - performance improvement

I have 2 tables:

 

table name: table1

columns:

id

 

table name: table2

columns:

id

c1

c2

date1

 

To query table2, I use the following code:

 

var result = (from t1 in table1

join t2 in table2 on t1.id eqauls t2.c1

where t2.id == (from t22 in table2          

                                where t22.c1 == t1.id

                                order by t22.date1 descending

                               

                                select t22.id).first()

                                                                                                               

select t2)

 

return result.ToList()

 

To improve performance, I am thinking about using the following query instead:

 

var result = (from t1 in table1

join t2 on table2 on t1.id == t2.c1

where (!t2.c2.HasValue) || (t2.id == (from t22 in table2

                                                                                where t22.c1 == t1.id

                                                                                order by t22.date1 descending

                                                                                                               

                                                                                select t22.id).first()))

                                                                                                               

select t2)

 

return result.ToList()

 

 

My thought is, if condition !t2.c2.HasValue is true, then the second component of "or" statement will not be looked at. As a result, the subquery will not be run, improving the performance.

 

1. Is this correct? Or will the subquery be run anyway.

2. in the subquery, is the query submitted when .First() is called? Or when result.ToList() is executed?

 

 
ASKER CERTIFIED SOLUTION
Avatar of Bardobrave
Bardobrave
Flag of Spain image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Avatar of Fernando Soto
Fernando Soto
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of fippif
fippif

ASKER

I did not really get my answer on this question. But thanks for the input.