我正在使用Entity Framework和Linq to Entities以及MySQL ADO.Net連接器來訪問MySQL數據庫。這兩個SQL查詢中哪一個更高效?
有兩個表請求和提交與從請求到提交的一對多關係。因此,提交表包含RequestId列,該列對請求具有外鍵依賴性。
我需要檢索其提交中包含特定值的所有請求。在LINQ我能做到這一點的兩種方法之一:
var r1 = foo.Submissions.Where(s => s.FieldName == "foo" && s.FieldValue == "bar").Select(s => s.Request).Distinct();
var r2 = foo.Requests.Where(r => r.Submissions.Any(s => s.FieldName == "foo" && s.FieldValue == "bar"));
計算結果爲
SELECT `Distinct1`.*
FROM
(SELECT DISTINCT `Extent2`.*
FROM `Submissions` AS `Extent1` INNER JOIN `Requests` AS `Extent2` ON `Extent1`.`RequestId` = `Extent2`.`RequestId`
WHERE ("foo" = `Extent1`.`FieldName`) AND ("bar" = `Extent1`.`FieldValue`))
AS `Distinct1`
SELECT `Extent1`.*
FROM `Requests` AS `Extent1`
WHERE EXISTS
(SELECT 1 AS `C1`
FROM `Submissions` AS `Extent2`
WHERE (`Extent1`.`RequestId` = `Extent2`.`RequestId`) AND ((@gp1 = `Extent2`.`FieldName`) AND (@gp2 = `Extent2`.`FieldValue`)))
現在查詢的第一樣式使用的INNER JOIN ...是不是第二選擇現在效率較低?
啊,但我使用MySQL作爲數據庫,這些工具可以工作嗎? – puffpio 2010-12-11 07:47:32
我嘗試過在MySQL中使用EXPLAIN關鍵字,但它不如SQL Profiler – puffpio 2010-12-11 07:47:58
@puffpio - 如果您使用MySql,爲什麼您的問題有TSQL標記? – 2010-12-11 11:03:03