PDA

View Full Version : تفاوت فاحش سرعت دو کوئری مثل هم



javad3151
سه شنبه 13 شهریور 1386, 11:17 صبح
سلام
یک کروسر نوشتم و دیدم سرعتش فوق العاده پایینه (3 دقیقه ) با اینکه فقط یک رکورد که یک فیلد داره داخلشه



DECLARE contact_cursor CURSORFOR
SELECT Student.StudentID
FROM Student LEFTOUTERJOIN
ProfileON Student.StudentID =Profile.StudentID
WHEREProfile.StudentID ISNULL
GO
OPEN contact_cursor
declare @Studentid int
FETCH NEXT FROM contact_cursor into @Studentid
WHILE@@FETCH_STATUS= 0
BEGIN
print @Studentid
FETCH NEXT FROM contact_cursor into @Studentid
END
CLOSE contact_cursor
go
--Delete cursor
DEALLOCATE contact_cursor
go

محتوی کروسر رو باید یک دستور ساده پر کردم (که دقیقا همون نتیجه رو داره ، یعنی یک رکورد و یک فیلد ) و با کمال تعجب دیدم که ظرف کمتر از 1 ثانیه اجرا شد!!


DECLARE contact_cursor CURSORFOR
SELECTtop 1 StudentID from Student
GO
OPEN contact_cursor
declare @Studentid int
FETCH NEXT FROM contact_cursor into @Studentid
WHILE@@FETCH_STATUS= 0
BEGIN
print @Studentid
FETCH NEXT FROM contact_cursor into @Studentid
END
CLOSE contact_cursor
go
--Delete cursor
DEALLOCATE contact_cursor
go

چرا؟

پویا
سه شنبه 13 شهریور 1386, 12:45 عصر
شما از Left Outer Join استفاده کردید و این معنیش اینه که همه جدول Student به غیر از اونایی که در ProFile هستند در خروجی خواهد اومد
آیا مطمئنید این دستور فقط یک خروجی داره؟

javad3151
سه شنبه 13 شهریور 1386, 23:39 عصر
شما از Left Outer Join استفاده کردید و این معنیش اینه که همه جدول Student به غیر از اونایی که در ProFile هستند در خروجی خواهد اومد
آیا مطمئنید این دستور فقط یک خروجی داره؟

بله ، البته با داده های فعلی اینطوره و مطمئنا بعدا تغییر میکنه

Microsoft.net
چهارشنبه 14 شهریور 1386, 22:31 عصر
خسته نباشی !! خوب مشخصه که دستور دومی سریعتره شکی درش نیست شما توی دستور دومی از top 1 استفاده کردی و در این حالت عملا دستور select و cursor ات هیچ کار زمان بری انجام نمی دن و در نتیجه سریعتر هم کار انجام میشه

javad3151
پنج شنبه 15 شهریور 1386, 09:08 صبح
خسته نباشی !! خوب مشخصه که دستور دومی سریعتره شکی درش نیست شما توی دستور دومی از top 1 استفاده کردی و در این حالت عملا دستور select و cursor ات هیچ کار زمان بری انجام نمی دن و در نتیجه سریعتر هم کار انجام میشه

سلامت باشی!!
هر دو دستور select وقتی به تنهایی اجرا میشن هیچ مشکلی ندارند (با سرعت بالایی انجام میشوند)