C#.NET рдорд╛ LINQ рдХреНрд╡реЗрд░реАрд╣рд░реВ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ

рдкрд░рд┐рдЪрдп

╨Т рдпреЛ рд▓реЗрдЦ рдХреЗрд╣реА рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рдпреЛ LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ.
рдпрд╣рд╛рдБ рд╣рд╛рдореА рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреЛрдб рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╣рд┐ рдердк рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╣рд░реВ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫреМрдВ LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ.

рдЬреНрдЮрд╛рдд рдЫ LINQ(Language-Integrated Query) рдбрд╛рдЯрд╛ рд╕реНрд░реЛрдд рдЦреЛрдЬреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓ рд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рднрд╛рд╖рд╛ рд╣реЛред

╨Р LINQ to SQL DBMS рдорд╛ рдбрд╛рдЯрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреЗ рдкреНрд░рд╡рд┐рдзрд┐ рд╣реЛред рдпреЛ рдбреЗрдЯрд╛ рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реЛ, рдЬрд╣рд╛рдБ рдкреНрд░рд╢реНрдирд╣рд░реБ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдорд╛рд░реНрдлрдд рдирд┐рд░реНрдорд╛рдг рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓рд╛рдИ рддреНрдпрд╕рдкрдЫрд┐ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреЗрдЫред SQL рдкреНрд░рд╢реНрдирд╣рд░реВ рдкреНрд▓реЗрдЯрдлрд░реНрдо рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕рд░реНрднрд░рдорд╛ рдкрдард╛рдЗрдпреЛред рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, DBMS рджреНрд╡рд╛рд░рд╛ рд╣рд╛рдореНрд░реЛ рдорддрд▓рдм рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░.

рдпрджреНрдпрдкрд┐, LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ рдЗрд╖реНрдЯрддрдо рд▓рд┐рдЦрд┐рддрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рд╣реБрдБрджреИрди SQL рдкреНрд░рд╢реНрдирд╣рд░реВ, рдЬреБрди рдПрдХ рдЕрдиреБрднрд╡реА DBA рд▓реЗ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирдХреЛ рд╕рдмреИ рд╕реВрдХреНрд╖реНрдорддрд╛рд╣рд░реВрд╕рдБрдЧ рд▓реЗрдЦреНрди рд╕рдХреНрдЫ SQL рдкреНрд░рд╢реНрдирд╣рд░реВ:

  1. рдЗрд╖реНрдЯрддрдо рдЬрдбрд╛рдирд╣рд░реВ (рд╢рд╛рдорд┐рд▓) рд░ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрджреИ (рдХрд╣рд╛рдБ)
  2. рдЬрдбрд╛рдирд╣рд░реВ рд░ рд╕рдореВрд╣ рд╕рд░реНрддрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдорд╛ рдзреЗрд░реИ рд╕реВрдХреНрд╖реНрдорддрд╛рд╣рд░реВ
  3. рд╕рд░реНрддрд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирдорд╛ рдзреЗрд░реИ рднрд┐рдиреНрдирддрд╛рд╣рд░реВ IN рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд╨╕ рднрд┐рддреНрд░ рдЫреИрди, <> рдЕрди рдЕрд╡рд╕реНрдерд┐рдд
  4. рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ, CTE, рддрд╛рд▓рд┐рдХрд╛ рдЪрд░рд╣рд░реВ рдорд╛рд░реНрдлрдд рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдХреЛ рдордзреНрдпрд╡рд░реНрддреА рдХреНрдпрд╛рд╕рд┐рдЩ
  5. рд╡рд╛рдХреНрдпрдХреЛ рдкреНрд░рдпреЛрдЧ (рд╡рд┐рдХрд▓реНрдк) рдирд┐рд░реНрджреЗрд╢рди рд░ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрддрд╣рд░реБ рд╕рдВрдЧ рд╕рд╛рде (...)
  6. рдЪрдпрдирдХреЛ рдХреНрд░рдордорд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд░рд┐рдбрд┐рдЩрдмрд╛рдЯ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдорд╛рдзреНрдпрдордХреЛ рд░реВрдкрдорд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдкрд░рд┐рдгрд╛рдордХреЛ рдореБрдЦреНрдп рдкреНрд░рджрд░реНрд╢рди рдмрд╛рдзрд╛рд╣рд░реВ SQL рдкреНрд░рд╢реНрдирд╣рд░реВ рд╕рдВрдХрд▓рди рдЧрд░реНрджрд╛ LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ рд╣реЛ:

  1. рдПрдХ рдЕрдиреБрд░реЛрдзрдорд╛ рд╕рдореНрдкреВрд░реНрдг рдбреЗрдЯрд╛ рдЪрдпрди рд╕рдВрдпрдиреНрддреНрд░рдХреЛ рд╕рдореЗрдХрди
  2. рдХреЛрдбрдХреЛ рд╕рдорд╛рди рдмреНрд▓рдХрд╣рд░реВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЧрд░реНрджреИ, рдЬрд╕рд▓реЗ рдЕрдиреНрддрдд: рдзреЗрд░реИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкрдвреНрдЫ
  3. рдмрд╣реБ-рдШрдЯрдХ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрдХреЛ рд╕рдореВрд╣ (рддрд╛рд░реНрдХрд┐рдХ "рд░" рд░ "рд╡рд╛") - рд░ ╨╕ OR, рдЬрдЯрд┐рд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрдорд╛ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрджрд╛, рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬрд░рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдлрд┐рд▓реНрдбрд╣рд░реВрдорд╛ рдЙрдкрдпреБрдХреНрдд рдЧреИрд░-рдХреНрд▓рд╕реНрдЯрд░ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рднрдПрдХреЛ рддрдереНрдпрд▓рд╛рдИ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫ, рдЕрдиреНрддрддрдГ рдХреНрд▓рд╕реНрдЯрд░ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╡рд┐рд░реБрджреНрдз рд╕реНрдХреНрдпрд╛рди рдЧрд░реНрди рдерд╛рд▓реНрдЫ (INDEX рд╕реНрдХреНрдпрд╛рдирд╕рд░реНрддрд╣рд░реВрдХреЛ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛
  4. рд╕рдмрдХреНрд╡реЗрд░реАрд╣рд░реВрдХреЛ рдЧрд╣рд┐рд░реЛ рдиреЗрд╕реНрдЯрд┐рдЩрд▓реЗ рдкрд╛рд░реНрд╕рд┐рдЩрд▓рд╛рдИ рдзреЗрд░реИ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдмрдирд╛рдЙрдБрдЫ SQL рдХрдердирд╣рд░реВ рд░ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдкрдХреНрд╖рдорд╛ рдкреНрд░рд╢реНрди рдпреЛрдЬрдирд╛рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд░ DBA

рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рд╣рд░реВ

рдЕрдм рд╕рд┐рдзреИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рд╡рд┐рдзрд┐рд╣рд░реВрдорд╛ рдЬрд╛рдФрдВред

1) рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛

рдореБрдЦреНрдп рдЫрдиреЛрдЯ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБ рдЙрддреНрддрдо рд╣реБрдиреНрдЫ, рдХрд┐рдирдХрд┐ рдкреНрд░рд╛рдпрдГ рд╕рдореНрдкреВрд░реНрдг рдХреНрд╡реЗрд░реА рдПрдХ рд╡рд╛ рджреБрдИ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╡реНрдпрдХреНрддрд┐-рдЕрдкрд░реЗрд╕рдирд╣рд░реВ) рд░ рд╕рд░реНрддрд╣рд░реВрдХреЛ рдорд╛рдирдХ рд╕реЗрдЯ (IsClosed, Canceled, Enabled, Status) рдХреЛ рд╡рд░рд┐рдкрд░рд┐ рдмрдирд╛рдЗрдиреНрдЫред рдкрд╣рд┐рдЪрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдирдореВрдирд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рд╕реВрдЪрдХрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред

рдпреА рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдЪрдпрди рдЧрд░реНрджрд╛ рдпреЛ рд╕рдорд╛рдзрд╛рдирд▓реЗ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдлрд░реНрдХрд╛рдЗрдПрдХреЛ рд╕реЗрдЯрд▓рд╛рдИ рдХреНрд╡реЗрд░реАрдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрджрдЫред

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд╕рдБрдЧ 500000 рдЖрд╡реЗрджрдирд╣рд░реВ рдЫрдиреНред рдпрджреНрдпрдкрд┐, рддреНрдпрд╣рд╛рдБ рдХреЗрд╡рд▓ 2000 рд╕рдХреНрд░рд┐рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдЫрдиреНред рддреНрдпрд╕рдкрдЫрд┐ рд╕рд╣реА рд░реВрдкрдорд╛ рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдмрдЪрд╛рдЙрдиреЗрдЫ INDEX рд╕реНрдХреНрдпрд╛рди рдареВрд▓реЛ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдЧреИрд░-рдХреНрд▓рд╕реНрдЯрд░ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдорд╛рд░реНрдлрдд рджреНрд░реБрдд рд░реВрдкрдорд╛ рдбреЗрдЯрд╛ рдЪрдпрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред

рд╕рд╛рдереИ, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдХреЛ рдЕрднрд╛рд╡ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рд╣рд░реВ рдкрд╛рд░реНрд╕ рдЧрд░реНрди рд╡рд╛ рдкреНрд░рдгрд╛рд▓реА рджреГрд╢реНрдп рддрдереНрдпрд╛рдЩреНрдХрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдкреНрд░рдореНрдкреНрдЯрд╣рд░реВ рдорд╛рд░реНрдлрдд рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░:

  1. sys.dm_db_missing_index_groups
  2. sys.dm_db_missing_index_group_stats
  3. sys.dm_db_missing_index_details

рд╕рдмреИ рджреГрд╢реНрдп рдбреЗрдЯрд╛рд▓реЗ рд╣рд░рд╛рдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рд╕реНрдерд╛рдирд┐рдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрд╛рд╣реЗрдХред

рдпрджреНрдпрдкрд┐, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд░ рдХреНрдпрд╛рд╕рд┐рдЩ рдкреНрд░рд╛рдпрдГ рдЦрд░рд╛рдм рд▓реЗрдЦрд┐рдПрдХрд╛ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рд▓рдбреНрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ рд╣реБрдиреН LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ ╨╕ SQL рдкреНрд░рд╢реНрдирд╣рд░реВ.

рдЬреАрд╡рдирдХреЛ рдХрдареЛрд░ рдЕрднреНрдпрд╛рд╕рд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ, рдпреЛ рдкреНрд░рд╛рдпрдГ рд╡реНрдпрд╛рдкрд╛рд░рдХрд╛ рд▓рд╛рдЧрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордпрд╕реАрдорд╛рд╣рд░реВрдорд╛ рд╡реНрдпрд╛рдкрд╛рд░ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╣реБрдиреНрдЫред рд░ рдпрд╕реИрд▓реЗ, рднрд╛рд░реА рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╛рдп: рдХреНрдпрд╛рд╕рд┐рдЩрдХреЛ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреНрдЫред

рдпреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдкрдорд╛ рдЬрд╛рдпрдЬ рдЫ, рдХрд┐рдирдХрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рд╕рдзреИрдВ рдирд╡реАрдирддрдо рдбрд╛рдЯрд╛ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдиреНрдЯрд░рдлреЗрд╕рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдХреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рдЫред

рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рд╡реНрдпрд╡рд╕рд╛рдпрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рддрд░ рдЕрдиреНрддрддрдГ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд╕рдорд╛рдзрд╛рдирдорд╛ рдврд┐рд▓рд╛рдЗ рдЧрд░реЗрд░ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдкреНрд░рджрд░реНрд╢рдирд▓рд╛рдИ рдХрдо рдЧрд░реНрджрдЫред

рдпреЛ рдкрдирд┐ рд╕рдореНрдЭрдирд╛ рд▓рд╛рдпрдХ рдЫ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВ рдЦреЛрдЬреНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдердкреНрди, рд╕реБрдЭрд╛рд╡рд╣рд░реВ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдирд┐рдореНрди рд╕рд░реНрддрд╣рд░реВ рд╕рд╣рд┐рдд рдЕрдиреБрдХреВрд▓рди рдЧрд▓рдд рд╣реБрди рд╕рдХреНрдЫ:

  1. рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдкрд╣рд┐рд▓реЗ рдиреИ рдлрд┐рд▓реНрдбрд╣рд░реВрдХреЛ рд╕рдорд╛рди рд╕реЗрдЯ рднрдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВ рдЫрдиреН
  2. рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛рдХрд╛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВрдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди (рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╣рд╛рдБ).

2) рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрд▓рд╛рдИ рдПрдХ рдирдпрд╛рдБ рд╡рд┐рд╢реЗрд╖рддрд╛рдорд╛ рдорд░реНрдЬ рдЧрд░реНрджреИ

рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдПрдЙрдЯреИ рддрд╛рд▓рд┐рдХрд╛рдмрд╛рдЯ рдХреЗрд╣реА рдХреНрд╖реЗрддреНрд░рд╣рд░реВ, рдЬреБрди рд╕рд░реНрддрд╣рд░реВрдХреЛ рд╕рдореВрд╣рдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ, рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реЗрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдпреЛ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд╕реНрдерд┐рддрд┐ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рддреНрдп рд╣реЛ, рдЬреБрди рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдмрд┐рдЯ рд╡рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░рдорд╛ рд╣реБрдиреНрдЫред

рдЙрджрд╛рд╣рд░рдг:

рдмрдиреНрдж = реж рд░ рд░рджреНрдж = реж рд░ рд╕рдХреНрд╖рдо = реж рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ рд╕реНрдерд┐рддрд┐ = 1.

рдпреА рд╕реНрдерд┐рддрд┐рд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рднрд░рд┐рдПрдХрд╛ рдЫрдиреН рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпрд╣рд╛рдБ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдПрдХреЛ рдЫред рдЕрд░реНрдХреЛ, рдпреЛ рдирдпрд╛рдБ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдЫред

рдпреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╕рдорд╕реНрдпрд╛рдХреЛ рдЖрдзрд╛рд░рднреВрдд рд╕рдорд╛рдзрд╛рди рд╣реЛ, рдХрд┐рдирдХрд┐ рд╣рд╛рдореА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрдЫреМрдВред

3) рджреГрд╢реНрдпрдХреЛ рднреМрддрд┐рдХреАрдХрд░рдг

рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдорд╛ LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ, CTEs, рд░ рддрд╛рд▓рд┐рдХрд╛ рдЪрд░рд╣рд░реВ рд╕реАрдзрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред

рдпрджреНрдпрдкрд┐, рдпрд╕ рдХреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрдиреЗ рдЕрд░реНрдХреЛ рддрд░рд┐рдХрд╛ рдЫ - рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпрд╣рд░реВред

рдЕрд╡рд╕реНрдерд╛ рд╕рдореВрд╣ (рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрдмрд╛рдЯ) рдмрдиреНрдж = реж рд░ рд░рджреНрдж = реж рд░ рд╕рдХреНрд╖рдо = реж (рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рди рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ) рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреГрд╢реНрдпрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд░рд╛рдореНрд░реЛ рд╡рд┐рдХрд▓реНрдк рдмрдиреНрдЫ, рдареВрд▓реЛ рд╕реЗрдЯрдмрд╛рдЯ рдбрд╛рдЯрд╛рдХреЛ рд╕рд╛рдиреЛ рдЯреБрдХреНрд░рд╛ рдХреНрдпрд╛рд╕ рдЧрд░реНрджреИред

рддрд░ рджреГрд╢реНрдпрд▓рд╛рдИ рд╕рд╛рдХрд╛рд░ рдЧрд░реНрджрд╛ рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВ рдЫрдиреН:

  1. рд╕рдмрдХреНрд╡реЗрд░реАрд╣рд░реВ, рдХреНрд▓рдЬрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рдЕрд╡рд╕реНрдерд┐рдд рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреБрдкрд░реНрдЫ рд╢рд╛рдорд┐рд▓
  2. рддрдкрд╛рдИрдВ рд╡рд╛рдХреНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрди рдпреВрдирд┐рдпрди, рдпреВрдирд┐рдпрди рд╕рдмреИ, рдмрд╣рд┐рд╖реНрдХрд╛рд░, рдЗрдиреНрдЯрд░рд╕реЗрдХреНрдЯ
  3. рддрдкрд╛рдЗрдБ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрдд рд░ рдЦрдгреНрдбрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрди рд╡рд┐рдХрд▓реНрдк
  4. рд╕рд╛рдЗрдХрд▓рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдЫреИрди
  5. рд╡рд┐рднрд┐рдиреНрди рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдмрд╛рдЯ рдПрдХ рджреГрд╢реНрдпрдорд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рдЫ

рдпреЛ рдпрд╛рдж рд░рд╛рдЦреНрдиреБ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рдХрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреГрд╢реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдн рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЧрд░реЗрд░ рдорд╛рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рддрд░ рдПрдХ рджреГрд╢реНрдп рдХрд▓ рдЧрд░реНрджрд╛, рдпреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди, рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ (NOEXPAND) рд╕рдБрдЧ.

рд╕рдиреН реирежреж рджреЗрдЦрд┐ LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрддрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рдЫ, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдЕрд░реНрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫ - рдирд┐рдореНрди рдлрд╛рд░рдордХреЛ "рд░реЗрдкрд░":

CREATE VIEW ╨Ш╨Ь╨п_╨┐╤А╨╡╨┤╤Б╤В╨░╨▓╨╗╨╡╨╜╨╕╤П AS SELECT * FROM MAT_VIEW WITH (NOEXPAND);

4) рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдЕрдХреНрд╕рд░ рдорд╛ LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ рд╕рдмрдХреНрд╡реЗрд░реАрдХрд╛ рдареВрд▓рд╛ рдмреНрд▓рдХрд╣рд░реВ рд╡рд╛ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рднрдПрдХрд╛ рджреГрд╢реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмреНрд▓рдХрд╣рд░реВрд▓реЗ рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рд░ рд╕рдмреЛрдкреНрдЯрд┐рдорд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╕рд╛рде рдЕрдиреНрддрд┐рдо рдХреНрд╡реЗрд░реА рдмрдирд╛рдЙрдБрдЫрдиреНред

рдорд╛ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рдлрд╛рдЗрджрд╛рд╣рд░реВ LINQ рдкреНрд░рд╢реНрдирд╣рд░реВ:

  1. рдХреНрд╖рдорддрд╛, рджреГрд╢реНрдп рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд░ рд╡рд╕реНрддреБ рдХреЛ рд░реВрдк рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА, рддрд░ рддрдкрд╛рдИрд▓реЗ рдЗрдирдкреБрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реБ рдХреЛ рдПрдХ рд╕реЗрдЯ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
    рдлрдВрдХреНрд╢рдирдмрд╛рдЯ (@param1, @param2 ...)
    рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд▓рдЪрд┐рд▓реЛ рдбрд╛рдЯрд╛ рдирдореВрдирд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ
  2. рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕рдиреНрджрд░реНрднрдорд╛, рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреГрд╢реНрдпрд╣рд░реВрдХреЛ рдорд╛рдорд▓рд╛рдорд╛ рдХреБрдиреИ рдкрдирд┐ рдХрдбрд╛ рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВ рдЫреИрдирдиреН:
    1. рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдХреЗрдд:
      рдорд╛рд░реНрдлрдд LINQ рддрдкрд╛рдИрд▓реЗ рдХреБрди рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ рд░ рдХреНрд╡реЗрд░реА рдЧрд░реНрджрд╛ рдбреЗрдЯрд╛ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдиред
      рддрд░ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдпреА рдХреНрд╖рдорддрд╛рд╣рд░реВ рдЫрдиреНред
      рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕рд╛рде, рддрдкрд╛рдЗрдБ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╣рд╛рдБ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд░ рдбреЗрдЯрд╛ рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдирд┐рдпрдорд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЫрдиреНред
    2. рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпрд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛, рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ:
      • рдЬрдЯрд┐рд▓ рдбрд╛рдЯрд╛ рдирдореВрдирд╛ рддрд░реНрдХ (рд▓реВрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрдирд┐)
      • рдзреЗрд░реИ рдлрд░рдХ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ
      • рдХреЛ рдкреНрд░рдпреЛрдЧ рдпреВрдирд┐рдпрди ╨╕ рдЕрд╡рд╕реНрдерд┐рдд

  3. рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд┐рдХрд▓реНрдк рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рдЫ рдЬрдм рд╣рд╛рдореА concurrency рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ OPTION(MAXDOP N), рдХреНрд╡реЗрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЬрдирд╛ рдХреЛ рдХреНрд░рдоред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐:
    • рддрдкрд╛рдИрдВрд▓реЗ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдХреЛ рдЬрдмрд░рдЬрд╕реНрддреА рдкреБрди: рд╕рд┐рд░реНрдЬрдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╡рд┐рдХрд▓реНрдк (рдкреБрдирдГ рдХрдореНрдкрд╛рдЗрд▓)
    • рддрдкрд╛рдИрдВрд▓реЗ рдХреНрд╡реЗрд░реАрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рд╕рд╛рдореЗрд▓ рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рд▓рд╛рдИ рдЬрдмрд░рдЬрд╕реНрддреА рдЧрд░реНрдиреЗ рдХрд┐ рднрдиреЗрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╡рд┐рдХрд▓реНрдк (рдлреЛрд░реНрд╕ рдЕрд░реНрдбрд░)

    рдмрд╛рд░реЗ рдердк рд╡рд┐рд╡рд░рдг рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдпрд╣рд╛рдБ.

  4. рд╕рд╛рдБрдШреБрд░реЛ рд░ рд╕рдмреИрднрдиреНрджрд╛ рдЖрд╡рд╢реНрдпрдХ рдбрд╛рдЯрд╛ рд╕реНрд▓рд╛рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ:
    рдХреНрдпрд╛рд╕рд╣рд░реВрдорд╛ рдареВрд▓рд╛ рдбреЗрдЯрд╛ рд╕реЗрдЯрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди (рдЬрд╕реНрддреИ рдЕрдиреБрдХреНрд░рдорд┐рдд рджреГрд╢реНрдпрд╣рд░реВрдХреЛ рдорд╛рдорд▓рд╛ рд╣реЛ), рдЬрд╣рд╛рдБрдмрд╛рдЯ рддрдкрд╛рдИрдВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рджреНрд╡рд╛рд░рд╛ рдбрд╛рдЯрд╛ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
    рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддреНрдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдЫ рдЬрд╕рдХреЛ рдлрд┐рд▓реНрдЯрд░ рдХрд╣рд╛рдБ рддреАрди рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ (рдП рдмреА рд╕реА).

    рдкрд░рдореНрдкрд░рд╛рдЧрдд рд░реВрдкрдорд╛, рд╕рдмреИ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд╕реНрдерд┐рд░ рдЕрд╡рд╕реНрдерд╛ рд╣реБрдиреНрдЫ a = 0 рд░ b = 0.

    рдпрджреНрдпрдкрд┐, рдХреНрд╖реЗрддреНрд░рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрд░реЛрдз c рдЕрдзрд┐рдХ рдЪрд░ред

    рд╢рд░реНрдд рд░рд╛рдЦреМрдВ a = 0 рд░ b = 0 рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдирддрд┐рдЬрд╛рд▓рд╛рдИ рд╣рдЬрд╛рд░реМрдВ рд░реЗрдХрд░реНрдбрд╣рд░реВрдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрджрдЫ, рддрд░ рд╕рд░реНрддрдорд╛ ╤Б рдПрдХ рд╕рдп рд░реЗрдХрд░реНрдбрдорд╛ рдЪрдпрдирд▓рд╛рдИ рд╕рдВрдХреБрдЪрд┐рдд рдЧрд░реНрджрдЫред

    рдпрд╣рд╛рдБ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░реНрдп рдПрдХ рд░рд╛рдореНрд░реЛ рд╡рд┐рдХрд▓реНрдк рд╣реБрди рд╕рдХреНрдЫред

    рд╕рд╛рдереИ, рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рдорд╛ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рд░ рд▓рдЧрд╛рддрд╛рд░ рдЫред

рдЙрджрд╛рд╣рд░рдг

рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╢реНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рд╣реЗрд░реМрдВред

рдЕрдиреБрд░реЛрдз рдЫ рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЬрд╕рд▓реЗ рдзреЗрд░реИ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрджрдЫ рд░ рдПрдЙрдЯрд╛ рджреГрд╢реНрдп (рдЕрдкрд░реЗрдЯрд┐рдн рдкреНрд░рд╢реНрдирд╣рд░реВ) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЬрд╕рдорд╛ рдЗрдореЗрд▓рджреНрд╡рд╛рд░рд╛ рд╕рдореНрдмрджреНрдзрддрд╛ рдЬрд╛рдБрдЪ рдЧрд░рд┐рдиреНрдЫ (рдорд╛рд░реНрдлрдд рдЕрд╡рд╕реНрдерд┐рдд) "рдЕрдкрд░реЗрдЯрд┐рдн рдкреНрд░рд╢реНрдирд╣рд░реВ" рд▓рд╛рдИ:

рдЕрдиреБрд░реЛрдз рдирдореНрдмрд░ рез

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM [dbo].[Questions] AS [Extent1]
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id],
[Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId],
[Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]) AND ( EXISTS (SELECT
1 AS [C1]
FROM [dbo].[OperativeQuestions] AS [Extent5]
WHERE (([Extent5].[Email] = @p__linq__0) OR (([Extent5].[Email] IS NULL) 
AND (@p__linq__0 IS NULL))) AND ([Extent5].[Id] = [Extent1].[Id])
));

рджреГрд╢реНрдпрдХреЛ рдмрд░реБ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдЫ: рдпрд╕рдорд╛ рд╕рдмрдХреНрд╡реЗрд░реА рдЬреЛрдбрд┐рдПрдХреЛ рдЫ рд░ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдиреЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рднрд┐рдиреНрди, рдЬреБрди рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╕рдЮреНрдЪрд╛рд▓рди рд╣реЛред

OperativeQuestions рдХреЛ рдПрдХ рдирдореВрдирд╛ рд▓рдЧрднрдЧ рджрд╕ рд╣рдЬрд╛рд░ рд░реЗрдХрд░реНрдб рдЫред

рдпрд╕ рдХреНрд╡реЗрд░реАрдХреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдмрд╛рд╣рд┐рд░реА рдХреНрд╡реЗрд░реАрдмрд╛рдЯ рд░реЗрдХрд░реНрдбрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, [OperativeQuestions] рджреГрд╢реНрдпрдорд╛ рдЖрдиреНрддрд░рд┐рдХ рд╕рдмрдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬреБрди [рдЗрдореЗрд▓] = @p__linq__0 рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдЖрдЙрдЯрдкреБрдЯ рдЪрдпрди рд╕реАрдорд┐рдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреБрдкрд░реНрдЫред рдЕрд╡рд╕реНрдерд┐рдд) рд╕рдпреМрдВ рд░реЗрдХрд░реНрдб рд╕рдореНрдоред

рд░ рдпрд╕реНрддреЛ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ рдХрд┐ рд╕рдмрдХреНрд╡реЗрд░реАрд▓реЗ [рдЗрдореЗрд▓] = @p__linq__0 рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкрдЯрдХ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпреА рджреБрдИ рд╕рдп рд░реЗрдХрд░реНрдбрд╣рд░реВ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд╕рд╛рде рдЖрдИрдбреАрджреНрд╡рд╛рд░рд╛ рдЬрдбрд╛рди рд╣реБрдиреБрдкрд░реНрдЫ, рд░ рдХреНрд╡реЗрд░реА рдЫрд┐рдЯреЛ рд╣реБрдиреЗрдЫред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рддреНрдпрд╣рд╛рдБ рд╕рдмреИ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЬрдбрд╛рди рдЫ: рдЕрдкрд░реЗрдЯрд┐рдн рдкреНрд░рд╢реНрдирд╣рд░реВрдмрд╛рдЯ рдЖрдИрдбреАрдХреЛ рд╕рд╛рде рдЖрдИрдбреА рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдкрддреНрд░рд╛рдЪрд╛рд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ, рд░ рдЗрдореЗрд▓рджреНрд╡рд╛рд░рд╛ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрдиреЗред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рдЕрдиреБрд░реЛрдзрд▓реЗ рд╕рдмреИ рджрд╢реМрдВ рд╣рдЬрд╛рд░ рдЕрдкрд░реЗрдЯрд┐рдн рдкреНрд░рд╢реНрди рд░реЗрдХрд░реНрдбрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрдЫ, рддрд░ рдЗрдореЗрд▓ рдорд╛рд░реНрдлрдд рд░реБрдЪрд┐рдХреЛ рдбреЗрдЯрд╛ рдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдЫред

рдкрд░рд┐рдЪрд╛рд▓рди рдкреНрд░рд╢реНрдирд╣рд░реВ рдкрд╛рда рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:

рдЕрдиреБрд░реЛрдз рдирдореНрдмрд░ рез

 
CREATE VIEW [dbo].[OperativeQuestions]
AS
SELECT DISTINCT Q.Id, USR.email AS Email
FROM            [dbo].Questions AS Q INNER JOIN
                         [dbo].ProcessUserAccesses AS BPU ON BPU.ProcessId = CQ.Process_Id 
OUTER APPLY
                     (SELECT   1 AS HasNoObjects
                      WHERE   NOT EXISTS
                                    (SELECT   1
                                     FROM     [dbo].ObjectUserAccesses AS BOU
                                     WHERE   BOU.ProcessUserAccessId = BPU.[Id] AND BOU.[To] IS NULL)
) AS BO INNER JOIN
                         [dbo].Users AS USR ON USR.Id = BPU.UserId
WHERE        CQ.[Exp] = 0 AND CQ.AnswerId IS NULL AND BPU.[To] IS NULL 
AND (BO.HasNoObjects = 1 OR
              EXISTS (SELECT   1
                           FROM   [dbo].ObjectUserAccesses AS BOU INNER JOIN
                                      [dbo].ObjectQuestions AS QBO 
                                                  ON QBO.[Object_Id] =BOU.ObjectId
                               WHERE  BOU.ProcessUserAccessId = BPU.Id 
                               AND BOU.[To] IS NULL AND QBO.Question_Id = CQ.Id));

DbContext рдорд╛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рджреГрд╢реНрдп рдореНрдпрд╛рдкрд┐рдЩ (EF рдХреЛрд░ 2)

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}

рдкреНрд░рд╛рд░рдореНрднрд┐рдХ LINQ рдХреНрд╡реЗрд░реА

var businessObjectsData = await context
    .OperativeQuestions
    .Where(x => x.Email == Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

рдпрд╕ рд╡рд┐рд╢реЗрд╖ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореА рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдмрд┐рдирд╛ рдиреИ рдпрд╕ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрджреИрдЫреМрдВ, рддрдпрд╛рд░ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ ("рд╕рдХреНрд░рд┐рдп рдкреНрд░рд╢реНрдирд╣рд░реВ") рдХреЛ рд╕рд╛рде рдЫреБрдЯреНрдЯреИ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╕реНрддреБрдд рдирдЧрд░реА, рдЬрд╕рд▓рд╛рдИ рдбреЗрдЯрд╛ рднрд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рдЕрдк рдЯреБ рдбреЗрдЯ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдВрдпрдиреНрддреНрд░рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░реНрджрдЫред ред

рдпрджреНрдпрдкрд┐ рдпреЛ рдПрдХ рд░рд╛рдореНрд░реЛ рд╕рдорд╛рдзрд╛рди рд╣реЛ, рддреНрдпрд╣рд╛рдБ рдпреЛ рд╕рдорд╕реНрдпрд╛ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рдЕрд░реНрдХреЛ рд╡рд┐рдХрд▓реНрдк рдЫред

рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЕрдкрд░реЗрдЯрд┐рдн рдкреНрд░рд╢реНрди рджреГрд╢реНрдпрдмрд╛рдЯ [рдЗрдореЗрд▓] = @p__linq__0 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рдХреНрдпрд╛рд╕ рдЧрд░реНрдиреБ рд╣реЛред

рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░реНрдп [dbo] [OperativeQuestionsUserMail] рдкрд░рд┐рдЪрдп рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдЗрдирдкреБрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд░реВрдкрдорд╛ рдЗрдореЗрд▓ рдкрдард╛рдПрд░, рд╣рд╛рдореАрд▓реЗ рдорд╛рдирд╣рд░реВрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдлрд┐рд░реНрддрд╛ рдкрд╛рдЙрдБрдЫреМрдВ:

рдЕрдиреБрд░реЛрдз рдирдореНрдмрд░ рез


CREATE FUNCTION [dbo].[OperativeQuestionsUserMail]
(
    @Email  nvarchar(4000)
)
RETURNS
@tbl TABLE
(
    [Id]           uniqueidentifier,
    [Email]      nvarchar(4000)
)
AS
BEGIN
        INSERT INTO @tbl ([Id], [Email])
        SELECT Id, @Email
        FROM [OperativeQuestions]  AS [x] WHERE [x].[Email] = @Email;
     
    RETURN;
END

рдпрд╕рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╕рд╛рде рдорд╛рдирд╣рд░реВрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдлрд░реНрдХрд╛рдЙрдБрдЫред

OperativeQuestionsUserMail рдХреЛ рдкреНрд░рд╢реНрдирд╣рд░реВ рдЗрд╖реНрдЯрддрдо рд╣реБрди рд░ рдЗрд╖реНрдЯрддрдо рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рд╣рд░реВ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рдХрдбрд╛ рд╕рдВрд░рдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ, рд░ рд╣реЛрдЗрдиред рд░рд┐рдЯрд░реНрдирдХреЛ рд░реВрдкрдорд╛ рддрд╛рд▓рд┐рдХрд╛ рдлрд░реНрдХрд╛рдЙрдБрдЫ...

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЖрд╡рд╢реНрдпрдХ рдХреНрд╡реЗрд░реА 1 рд▓рд╛рдИ рдХреНрд╡реЗрд░реА 4 рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ:

рдЕрдиреБрд░реЛрдз рдирдореНрдмрд░ рез

(@p__linq__0 nvarchar(4000))SELECT
1 AS [C1],
[Extent1].[Id] AS [Id],
[Join2].[Object_Id] AS [Object_Id],
[Join2].[ObjectType_Id] AS [ObjectType_Id],
[Join2].[Name] AS [Name],
[Join2].[ExternalId] AS [ExternalId]
FROM (
    SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] (@p__linq__0)
) AS [Extent0]
INNER JOIN [dbo].[Questions] AS [Extent1] ON([Extent0].Id=[Extent1].Id)
INNER JOIN (SELECT [Extent2].[Object_Id] AS [Object_Id], [Extent2].[Question_Id] AS [Question_Id], [Extent3].[ExternalId] AS [ExternalId], [Extent3].[ObjectType_Id] AS [ObjectType_Id], [Extent4].[Name] AS [Name]
FROM [dbo].[ObjectQuestions] AS [Extent2]
INNER JOIN [dbo].[Objects] AS [Extent3] ON [Extent2].[Object_Id] = [Extent3].[Id]
LEFT OUTER JOIN [dbo].[ObjectTypes] AS [Extent4] 
ON [Extent3].[ObjectType_Id] = [Extent4].[Id] ) AS [Join2] 
ON [Extent1].[Id] = [Join2].[Question_Id]
WHERE ([Extent1].[AnswerId] IS NULL) AND (0 = [Extent1].[Exp]);

DbContext (EF Core 2) рдорд╛ рдореНрдпрд╛рдкрд┐рдЩ рджреГрд╢реНрдп рд░ рдХрд╛рд░реНрдпрд╣рд░реВ

public class QuestionsDbContext : DbContext
{
    //...
    public DbQuery<OperativeQuestion> OperativeQuestions { get; set; }
    //...
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Query<OperativeQuestion>().ToView("OperativeQuestions");
    }
}
 
public static class FromSqlQueries
{
    public static IQueryable<OperativeQuestion> GetByUserEmail(this DbQuery<OperativeQuestion> source, string Email)
        => source.FromSql($"SELECT Id, Email FROM [dbo].[OperativeQuestionsUserMail] ({Email})");
}

рдЕрдиреНрддрд┐рдо LINQ рдХреНрд╡реЗрд░реА

var businessObjectsData = await context
    .OperativeQuestions
    .GetByUserEmail(Email)
    .Include(x => x.Question)
    .Select(x => x.Question)
    .SelectMany(x => x.ObjectQuestions,
                (x, bo) => new
                {
                    Id = x.Id,
                    ObjectId = bo.Object.Id,
                    ObjectTypeId = bo.Object.ObjectType.Id,
                    ObjectTypeName = bo.Object.ObjectType.Name,
                    ObjectExternalId = bo.Object.ExternalId
                })
    .ToListAsync();

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордпрдХреЛ рдХреНрд░рдо 200-800 ms рдмрд╛рдЯ 2-20 ms, рдЗрддреНрдпрд╛рджрд┐рдорд╛ рдЭрд░реЗрдХреЛ рдЫ, рдЕрд░реНрдерд╛рддреН рджрд╢реМрдВ рдЧреБрдгрд╛ рдЫрд┐рдЯреЛред

рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдмрдвреА рдФрд╕рдд рд░реВрдкрдорд╛ рд▓рд┐рдпреМрдВ рднрдиреЗ, 350 ms рдХреЛ рд╕рдЯреНрдЯрд╛ рд╣рд╛рдореАрд▓реЗ 8 ms рдкрд╛рдпреМрдВред

рд╕реНрдкрд╖реНрдЯ рдлрд╛рдЗрджрд╛рд╣рд░реВрдмрд╛рдЯ рд╣рд╛рдореА рдкрдирд┐ рдкрд╛рдЙрдБрдЫреМрдВ:

  1. рдкрдвреНрдиреЗ рднрд╛рд░рдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрдореА,
  2. рдЕрд╡рд░реБрджреНрдз рдХреЛ рд╕рдВрднрд╛рд╡рдирд╛ рдорд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА
  3. рд╕реНрд╡реАрдХрд╛рд░реНрдп рдорд╛рдирд╣рд░реВрдорд╛ рдФрд╕рдд рдЕрд╡рд░реБрджреНрдз рд╕рдордп рдШрдЯрд╛рдЙрдБрджреИ

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рдбрд╛рдЯрд╛рдмреЗрд╕ рдХрд▓рд╣рд░реВрдХреЛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рд░ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдЩ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдорд╛рд░реНрдлрдд LINQ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреЗ рд╕рдорд╕реНрдпрд╛ рд╣реЛред

рдпрд╕ рдХрд╛рд░реНрдпрдорд╛ рдзреНрдпрд╛рди рд░ рдирд┐рд░рдиреНрддрд░рддрд╛ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред

рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд╕реБрд░реБрдорд╛:

  1. рдЕрдиреБрд░реЛрдз рдХрд╛рдо рдЧрд░реНрдиреЗ рдбреЗрдЯрд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рдорд╛рди, рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ)
  2. рдпрд╕ рдбрд╛рдЯрд╛рдХреЛ рдЙрдЪрд┐рдд рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреВрд░рд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН
  3. рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдмреАрдЪ рдЬреЛрдбрд┐рдиреЗ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрдХреЛ рд╢реБрджреНрдзрддрд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдЕрд░реНрдХреЛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд▓реЗ рдмрддрд╛рдЙрдБрдЫ:

  1. рдЕрдиреБрд░реЛрдзрдХреЛ рдЖрдзрд╛рд░ рд░ рдореБрдЦреНрдп рдЕрдиреБрд░реЛрдз рдлрд┐рд▓реНрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫ
  2. рд╕рдорд╛рди рдХреНрд╡реЗрд░реА рдмреНрд▓рдХрд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрджреИ рд░ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрджреИ
  3. SSMS рд╡рд╛ рдЕрдиреНрдп GUI рдорд╛ SQL рд╕рд░реНрднрд░ рдЖрдлреИрд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрджрдЫ SQL рдХреНрд╡реЗрд░реА (рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрджреИ, рдпреЛ рднрдгреНрдбрд╛рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд░рд┐рдгрд╛рдо рдХреНрд╡реЗрд░реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ (рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╣реБрди рд╕рдХреНрдЫ)
  4. рдЕрдиреНрддрд┐рдо рдЪрд░рдгрдорд╛, рдирддрд┐рдЬрд╛рд▓рд╛рдИ рдЖрдзрд╛рд░ рдорд╛рдиреНрджреИ SQL рдХреНрд╡реЗрд░реА, рд╕рдВрд░рдЪрдирд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рднрдЗрд░рд╣реЗрдХреЛ рдЫ LINQ рдХреНрд╡реЗрд░реА

рдирддрд┐рдЬрд╛ LINQ рдХреНрд╡реЗрд░реА рдкрд╣рд┐рдЪрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЗрд╖реНрдЯрддрдордХреЛ рд╕рдВрд░рдЪрдирд╛рдорд╛ рд╕рдорд╛рди рд╣реБрдиреБрдкрд░реНрдЫ SQL рдХреНрд╡реЗрд░реА рдмрд┐рдиреНрджреБ 3 рдмрд╛рдЯред

рд╕реНрд╡реАрдХрд╛рд░

рд╕рд╣рдХрд░реНрдореАрд╣рд░реВрд▓рд╛рдИ рдзреЗрд░реИ рдзреЗрд░реИ рдзрдиреНрдпрд╡рд╛рдж jobgemws ╨╕ alex_ozr рдХрдореНрдкрдиреАрдмрд╛рдЯ рдлреЛрд░реНрдЯрд┐рд╕ рдпреЛ рд╕рд╛рдордЧреНрд░реА рддрдпрд╛рд░ рдЧрд░реНрди рд╕рд╣рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди