PDA

View Full Version : سرعت پایین اجرای کوئری



dell816
دوشنبه 17 تیر 1387, 09:58 صبح
نوشته شده توسط dell816
با سلام :

جدولی دارم با حدود 1 میلیون رکورد.
این جدول دارای pk ترکیبی روی سه فیلد است.
میخواهم یک رکورد از این جدول را با شرطی که روی این سه فیلد
است پاک کنم قبلا سریعا پاک میشد ولی الان حدودا 6-7 ثانیه طول میکشد . لطفا راهنمایی بفرمایید چه ایندکسی add کنم.

delete from OrderHeader where orderno=25001 and ordertype=5 and financeyear=1387

سه فیلد orderno,ordertype,financeyear بصورت ترکیبی pk هستند

با تشکر فراوان از شما

AminSobati
دوشنبه 17 تیر 1387, 13:03 عصر
سلام،
در ایندکسی که به خاطر PK ساخته شده، کدوم فیلد اول قید شده؟

dell816
دوشنبه 17 تیر 1387, 18:29 عصر
اول فیلد OrderNo است و بعد ordertype و بعد Finance

AminSobati
دوشنبه 17 تیر 1387, 20:54 عصر
میتونین Execution Plan یک دستور Delete رو پست کنین تا ببینیم SQL Server از چه الگوریتمی داره استفاده میکنه؟

اقاقيا
سه شنبه 18 تیر 1387, 13:34 عصر
نوشته شده توسط dell816

سه فیلد orderno,ordertype,financeyear بصورت ترکیبی pk هستند

با تشکر فراوان از شما
با سلام
من یه سوال ساده دارم ...
چطور میشه چند فیلد رو به صورت ترکیبی pk تعریف کرد؟؟

amin_alexi
سه شنبه 18 تیر 1387, 15:06 عصر
سلام


من یه سوال ساده دارم ...
چطور میشه چند فیلد رو به صورت ترکیبی pk تعریف کرد؟؟


CREATE TABLE Tbl1 (
code nvarchar (5) NOT NULL ,
Name nvarchar (50) Not NULL ,
Price float NULL ,
CONSTRAINT [PK_Tbl1] PRIMARY KEY CLUSTERED
(
code,
Name
) ON PRIMARY
) ON PRIMARY


مو قع تعریف Pk یک "," بزار و فیلد دوم رو هم بنویس الان Codeو Name هر 2 با هم کلید اصلی هستند

dell816
چهارشنبه 19 تیر 1387, 16:40 عصر
اینهم ExeCution Plan

AminSobati
چهارشنبه 19 تیر 1387, 22:00 عصر
ممنون بابت Plan، این دستور رو اجرا کنین و بعد دستور Delete رو. خروجی که بدست آوردین پست کنین
set statistics profile on

dell816
پنج شنبه 20 تیر 1387, 18:23 عصر
اینهم خروجی بدست آمده

AminSobati
جمعه 21 تیر 1387, 14:05 عصر
این تصویر رو دوباره پست کردید! خروجی Delete بعد از set رو عرض کردم (پست شماره 8)

dell816
جمعه 21 تیر 1387, 21:04 عصر
ببخشید دقت نکردم

AminSobati
شنبه 22 تیر 1387, 12:09 عصر
اصلا خروجی مورد نظر بنده Graphical Execution Plan نیست. این حالت رو off کنید، statistics profile رو on کنید و دستور delete رو اجرا کنین

dell816
شنبه 22 تیر 1387, 14:24 عصر
اینهم خروجی فایل...............

AminSobati
شنبه 22 تیر 1387, 16:27 عصر
این ایندکسو بسازین و نتیجش رو پست کنین:



create index ix1 on [OrderHeader]([OrderNo],[FinancYear],[OrderTypeNo])

dell816
یک شنبه 23 تیر 1387, 09:34 صبح
سلام:

هیچ تغییری ایجاد نشد.

AminSobati
دوشنبه 24 تیر 1387, 13:23 عصر
خروجی stat profile رو بعد از ساخت ایندکس برای دستور delete بفرستین، همچنین Graphical Plan رو

dell816
شنبه 29 تیر 1387, 11:34 صبح
سلام
اینهم فایلها

AminSobati
چهارشنبه 16 مرداد 1387, 15:09 عصر
این ایندکس رو هم بسازین:


create index ix1 on OrderDetail(OrderNo)

dell816
پنج شنبه 17 مرداد 1387, 16:23 عصر
سلام استاد:

درست شد. خیلی ممنون . فقط میشه توضیح بدین چرا سرعتش خوب شد.

AminSobati
پنج شنبه 17 مرداد 1387, 21:45 عصر
به خاطر نداشتن ایندکس مناسب هر بار OrderDetail اسکن میشد. با وجود ایندکس جستجو برای یافتن رکوردهای حائز شرط سریعتر انجام میشه