PDA

View Full Version : سرعت دستورات اسکیو ال



jafari1
شنبه 06 مرداد 1386, 20:21 عصر
ضمن سلام
بنده یک select نوشته لم که به سرعت اجرا میشود ولی با اضافه کردن تابع left سرعت آن دهها و حتی صدها برابر کم میشود لطفا اگر راه حلی سراغ دارید بفرمایید

supporter
شنبه 06 مرداد 1386, 23:22 عصر
اگه ممکنه Query مورد نظرتون رو بنویسید

jafari1
یک شنبه 07 مرداد 1386, 18:23 عصر
این کوری را در کمتر از یک ثانیه اجرا میکند


update Temp set var1=(select sum(bed) from Items where code=temp.code)


و این کوری را چند دقیقه طول میکشد


update Temp set var1=(select sum(bed) from Items where left(code,3)=temp.code)

supporter
یک شنبه 07 مرداد 1386, 23:33 عصر
اولا ممکنه در Query دوم تعداد رکوردهایی که sum(bed) روی اونها گرفته می شه (left(code,3)=temp.code) خیلی بیشتر از Query اول باشه(code=temp.code)

ثانیا اگه روی code ایندکس داشته باشید درحالت معمول در Query اول Index Seek میشه
در حالتی که در Query دوم این امکان وجود نداره و Index Scan صورت می گیره بنابراین در حالتهایی که تعداد رکوردهای جدولتون زیاد باشه ممکن زمان اجرای این دو Query اختلاف زیادی با هم پیدا کنه

AminSobati
سه شنبه 09 مرداد 1386, 00:03 صبح
دوست عزیزم این کار رو انجام بدین:


alter table Items
add cnew as left(code,3)
go
create index ix1 on temp(cnew,bed)

حالا سرعت Update با Left رو آزمایش کنین

MajerajooyeKhallagh
سه شنبه 09 مرداد 1386, 07:45 صبح
دوست عزیزم این کار رو انجام بدین:


alter table Items
add cnew as left(code,3)
go
create index ix1 on temp(cnew,bed)

حالا سرعت Update با Left رو آزمایش کنین

البته با اجازه استاد بزرگوار, آقای ثباتی عزیز
فکر میکنم منظور ایشون ایجاد Index بر روی جدول Items باشه نه Temp

AminSobati
پنج شنبه 11 مرداد 1386, 20:23 عصر
دقیقا همینطوره!