PDA

View Full Version : سوال: تفاوت دو دستور



Iran58
پنج شنبه 03 دی 1394, 09:33 صبح
سلام
فرض کنیم جدول زیر را طراحی کرده ایم
CREATE TABLE [dbo].[tbl_User](
[UserId] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](25) NULL,
[LastName] [nvarchar](25) NULL,
[UserName] [nvarchar](25) NULL,
[Password] [nvarchar](25) NULL,
[Image] [nvarchar](150) NULL,
[UserTypeId] [int] NULL,
CONSTRAINT [PK_tbl_User] PRIMARY KEY CLUSTERED
(
[UserId] 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


دو دستور sp زیر را هم نوشته ایم

create proc [dbo].[S_tbl_User_Select]
@UserName nvarchar(50),
@Password nvarchar(50)
as
begin
select * from
[dbo].[tbl_User]
where
[UserName]=@UserName
and
[Password]=@Password
end


create proc [dbo].[S_tbl_User_Select1]

as
begin
select * from
[dbo].[tbl_User]

end

حالا درسمت برنامه این دو دستور را با دو کد زیر اجرا میکنیم
1)

var list = db.S_tbl_User_Select1()
.Where(
current => current.UserName == txtuser.Text
&&
current.Password == txtpass.Text
).FirstOrDefault();

2)

var list1 = db.S_tbl_User_Select(
txtuser.Text, txtpass.Text
).FirstOrDefault();


حال سوالهای من این است
الف)پارامترها را سمت بانک بنویسم بهتراست(sp شماره یک)یا نه(sp شماره دو)؟
ب)سرعت اجرا کدام دستور درسمت برنامه بیشتر است؟
ج)کارای کدام دستور درسمت برنامه بهتراست؟

fakhradin
پنج شنبه 03 دی 1394, 11:53 صبح
ج الف) همیشه نوشتن پارامترها و انجام عملیات توی بانک اطلاعاتی به صورت مستقیم سرعت اجراش بیشتره البته توی صد تا دویست ردیف توی جدول زیاد به چشم نمی یاد ولی توی داده های بیشتر از هزار ردیف در جدول واقعا خیلی به چشم می یاد
ج ب) در مورد سرعت اجرا که توی همون بخش الف جواب دادم
ج ج)همیشه انجام عملیات پرس و جو در سمت بانک اطلاعاتی سرعتش بیشتره چون توی اکثر زبون های برنامه نویسی باید ابتدا کدها به یک زبون میانی تبدیل بشه بعد از زبون میانی به سمت زبون ماشین می ره ولی توی دستورات بانک اطلاعاتی نیاز به این تبدیل به زبون میانی نیست و در نتیجه سرعت اجراشون بیشتره
اگرم نیاز به توجیه بیشتری داشتید می تونید با یک جدول که بیشتر از هزار ردیف داده داره این کارو تست کنید تا متوجه بشید که سرعت اجرا چقدر محسوسه