معرفی
LINQ به عنوان یک زبان قدرتمند دستکاری داده ها به دات نت اضافه شد. LINQ to SQL به شما اجازه می دهد تا با استفاده از Entity Framework به راحتی با DBMS صحبت کنید. اما اغلب هنگام استفاده از آن، توسعه دهندگان فراموش می کنند که نوع پرس و جوی SQL توسط ارائه دهنده پرس و جو ایجاد شود (Entity Framework در مورد مثال ما). در این مقاله، نحوه بهینه سازی عملکرد کوئری های LINQ را بررسی خواهیم کرد.
پیاده سازی
بیایید دو نکته مهم را با استفاده از یک مثال بررسی کنیم.
ابتدا باید پایگاه داده تست را در SQL Server ایجاد کنیم. در این پایگاه داده، با اجرای پرس و جو زیر دو جدول ایجاد می کنیم.
- USE [TEST]
- GO
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- CREATE TABLE [dbo].[Ref](
- [ID] [int] NOT NULL,
- [ID2] [int] NOT NULL,
- [Name] [nvarchar](255) NOT NULL,
- [InsertUTCDate] [datetime] NOT NULL,
- CONSTRAINT [PK_Ref] PRIMARY KEY CLUSTERED
- (
- [ID] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
- GO
- ALTER TABLE [dbo].[Ref] ADD CONSTRAINT [DF_Ref_InsertUTCDate] DEFAULT (getutcdate()) FOR [InsertUTCDate]
- GO
- USE [TEST]
- GO
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- CREATE TABLE [dbo].[Customer](
- [ID] [int] NOT NULL,
- [Name] [nvarchar](255) NOT NULL,
- [Ref_ID] [int] NOT NULL,
- [InsertUTCDate] [datetime] NOT NULL,
- [Ref_ID2] [int] NOT NULL,
- CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
- (
- [ID] ASC
- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
- ) ON [PRIMARY]
- GO
- ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [DF_Customer_Ref_ID] DEFAULT ((0)) FOR [Ref_ID]
- GO
- ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [DF_Customer_InsertUTCDate] DEFAULT (getutcdate()) FOR [InsertUTCDate]
- GO
حالا بیایید جدول Ref را با کمک اسکریپت زیر پر کنیم. صبر کنید... من فقط یک اسکریپت را اجرا کردم، اما آن را ذخیره نکردم. در چنین مواردی، SQL Complete by Devart می تواند بسیار راحت باشد. با SSMS و Visual Studio یکپارچه می شود و دارای ویژگی Execution History است.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/optimizing-linq-queries-in-c-sharp-net-for-ms-sql-server/Images/LINQ_01.jpg)
شکل 1 - ویژگی تاریخچه اجرا
این قابلیت تاریخچه پرس و جوهایی را که در SSMS اجرا شده اند را نمایش می دهد.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/optimizing-linq-queries-in-c-sharp-net-for-ms-sql-server/Images/LINQ_02.jpg)
شکل 2 - تاریخچه پرس و جوها
توجه داشته باشید که چگونه پنجره از عناصر زیر تشکیل شده است:
- کادر جستجو برای فیلتر کردن نتایج
- کادر محدوده تاریخ برای فیلتر کردن نتایج
- نتایج در یک جدول ارائه شده است. می توانید داده ها را بر اساس ستون های این جدول مرتب کنید (با استفاده از کلید SHIFT می توانید مجموعه ای از ستون ها را برای مرتب سازی انتخاب کنید)
- کد ردیف انتخاب شده
جدول نتیجه شامل تاریخچه ای از اسکریپت های اجرا شده در SSMS است و شامل جداول زیر است:
- وضعیت - نشان می دهد که آیا اسکریپت با موفقیت اجرا شده است یا خیر