InnerJoin vs Contains, which is faster

I am writing a query to find the sum of an integer value from a database using linq. while I was developing, I had two thoughts. I can either do this, or fill in, or an inner join. The following are the requests

var Customer = db.tbl_User_to_CustomerMast.Where(i => i.fk_Store_ID == s.ShopID).ToList();

Request 1:

var RewardCount = db.tbl_RewardAwardMast.Where(i => Customer.Select(j => j.User_Customer_ID).ToList().Contains(i.fk_Customer_UserID.Value)).Sum(i => i.RewardPoints).GetValueOrDefault(0);

Request 2:

var RewardCount = Customer.Join(db.tbl_RewardAwardMast, i => i.User_Customer_ID, j => j.fk_Customer_UserID, (i, j) => new { Customer = i, Reward = j }).Sum(i=>i.Reward.RewardPoints).GetValueOrDefault(0);

I know that in both requests a server-side calculation will be performed to match records.

So, which query is suitable for faster execution?

0
source share
1 answer

I would say that Query 1 will be faster since it will translate simple SQL like this:

SELECT SUM(RewardPoints)
FROM User_to_CustomerMast
WHERE fk_Customer_UserID IN (c1,c2,c3,c4,c5,...,cx)

2 , . , , ToList(). , , - JOIN . UNION.

SELECT SUM(RewardPoints)
FROM 
    User_to_CustomerMast INNER JOIN
    (
         SELECT c1
         UNION 
         SELECT c2
         UNION 
         SELECT c3
         UNION 
         SELECT c4
         UNION 
         SELECT c5
         UNION 
         ...
         ...
         SELECT cx
     ) AS T ON T.Id = fk_Customer_UserID 

, , . , - , SQL .

: http://blog.hompus.nl/2010/08/26/joining-an-iqueryable-with-an-ienumerable/

0

Source: https://habr.com/ru/post/1661030/


All Articles