2012-10-17 20 views
0

我想爲我的ASP.NET 4.5網站使用Simple.Data Micro-ORM。然而,在決定是否使用它之前,我需要知道一些事情。Simple.Data默認生成的查詢和性能

讓我們採取以下聯接查詢,例如:

var albums = db.Albums.FindAllByGenreId(1) 
    .Select(
db.Albums.Title, 
db.Albums.Genre.Name); 

這個查詢將被翻譯成:

select 
[dbo].[Albums].[Title], 
[dbo].[Genres].[Name] 
from [dbo].[Albums] 
    LEFT JOIN [dbo].[Genres] ON ([dbo].[Genres].[GenreId] = [dbo].[Albums].[GenreId]) 
WHERE [dbo].[Albums].[GenreId] = @p1 
@p1 (Int32) = 1 

讓我們假設「流派」表是用十萬甚至上百萬AA表的行。我認爲在JOIN發生之後過濾數據可能非常低效,這是SimpleQuery中爲此查詢翻譯的內容。

最好過濾Generes表中的數據,這意味着首先創建一個SELECT語句並使用該過濾的表進行JOIN操作?

提前過濾數據不是更好嗎?

此外,是否有一個選項可以使用Simple.Data創建該類型的複雜(JOIN在過濾的表上)查詢。

需要你的答案知道是否繼續使用Simple.Data,或將它潮溼以支持另一個micro-ORM。

+1

順便說一句,如果您有/任何/想法多少時間我花費了優化Simple.Data以獲得更快的性能,您可以在您的問題之外編輯該句子。 :( –

回答

5

您對數據庫引擎如何解釋和執行SQL感到困惑。現代數據庫對於執行查詢的最佳方式非常聰明,並且指令在SQL語句中出現的順序與它們的執行順序無關。

嘗試通過SQL Management Studio運行一些查詢並查看執行計劃以查看它們是如何實際優化和執行的。或者只是嘗試一下你認爲會更好的SQL,並看看它與Simple.Data生成的內容相比如何實際執行。

2

Simple.Data生成的sql是idomatic T-SQL,太老實了,如果我自己在起草sql,我會寫。

此sql允許Sql Server優化執行計劃,這應該是最有效的數據檢索。

+0

除了Nathan的回覆之外,Simple.Data目前還不支持在v1.0中創建子查詢,它計劃包含在v1.1中,但是出於對這種原因起作用的好奇心, – Hmobius

-1

Simple.Data的美妙之處在於,如果你有它產生你可以調用存儲過程的SQL任何疑問或問題:

db.ProcedureWithParameters(1, 2); 
+0

。發佈和downvote它milz? –