2012-05-08 23 views
0

LinqからSQlを使用してデータをクエリしています。私が順に選択クエリを記述し、SQL Serverプロファイラで監視する場合には、データを注文するテーブル Linq to SQlクエリのパフォーマンス

  • からフィールドを選択するselectコマンドを2回

    1. を実行します。

    データが大量になると時間がかかります。このための解決策はありますか?

    更新日:

    from dc in dataContext.UserTable join 
    m in dataContext.MonthLookups on dc.Month equals m.Month into sr 
    from x in sr.DefaultIfEmpty() 
    order by dc.UserName, dc.FirstName 
    select new {dc, sr.MothName}; 
    

    更新:

    SELECT 
    [Project1].[ UserName] AS [UserName], 
    [Project1].[ FirstName] AS [FirstName], 
    [Project1].[ MonthName] AS [MonthName], 
    [Project1].[year] AS [year] 
    FROM (SELECT 
        [Extent1].[UserName] AS [UserName], 
        [Extent1].[FirstName] AS [FirstName], 
        [Extent1].[year] AS [year], 
        [Extent2].[MonthName] AS [MonthName] 
        FROM [dbo].[DutySavingFin] AS [Extent1] 
        LEFT OUTER JOIN [dbo].[MonthLookup] AS [Extent2] ON [Extent1].[Month] = [Extent2].[Month] 
    ) AS [Project1] 
    ORDER BY [Project1].[UserName] ASC, [Project1].[FirstName] ASC 
    

    更新:

    好ましい方法:

    SELECT 
        [Extent1].[UserName] AS [UserName], 
        [Extent1].[FirstName] AS [FirstName], 
        [Extent1].[year] AS [year], 
        [Extent2].[MonthName] AS [MonthName] 
        FROM [dbo].[DutySavingFin] AS [Extent1] 
        LEFT OUTER JOIN [dbo].[MonthLookup] AS [Extent2] ON [Extent1].[Month] = [Extent2].[Month] 
    ORDER BY [Extent1].[UserName] ASC, [Extent1].[FirstName] ASC 
    
  • +4

    テーブル内のすべてのデータを必要としない限り、?、あなたが必要とするレコードを絞り込むためにwhere句を追加しますか。 – Guillaume86

    +0

    dataContext.UserTable におけるDCからsr.DefaultIfEmpty(IN xからSR にm.Monthに等しいdc.MonthにdataContext.MonthLookupsにMを結合する)dc.UserNameによって ため、dc.FirstName新しい{DC、SRを選択 .MothName}; – sugirthini

    +0

    あなたの質問を編集し、コードブロックを使用して読みやすくなります;) – Guillaume86

    答えて

    1

    上記の例では、1つのクエリを示しています。それはあなたが何を意味するかである場合は、データの大規模なセットで作業している場合は、ネストされたクエリが...

    をパフォーマンスに影響を与えません。
    1あなたはDutySavingFin.Month、MonthLookup.Monthにインデックスを持っていることを確認してください)、およびDutySavingFin.UserName + DutySavingFin.FirstName。
    2)あなた本当にはあなたのコードを貼り付けることができ

    +0

    巨大なデータに対しては、ネストされたクエリと通常の選​​択クエリにパフォーマンスに影響があります。 – sugirthini

    +0

    私はそれが影響を持っていることは見たことがありません。 L2Sで生成されたクエリの実行計画を見てから、サブクエリなしで同じクエリをフラット化してみてください。通常、SQLオプティマイザは同じ実行計画を生成します。 – KristoferA