PDA

View Full Version : سوال: ایا این مدل ایندکس گزاری من روی این 3 جدول درسته !



amin_alexi
چهارشنبه 22 آبان 1387, 11:01 صبح
سلام
اگه دوستان راهنمایی کنن ممنون میشم . فکر کنم خیلی ها سوال من رو داشته باشن !!!
آیا این مدل اندکس گزاری من روی این 3 جدول فرضی درسته !
سه جدول که شما فرض کنید داریم سند میزنیم
Header که در این جدول SerialNumber رو ایندکس کلاستری گزاشتم
Detail که در این جدول SerialNumber رو ایندکس غیر کلاستری گزاشتم
Cust که در این جدول Code رو ایندکس کلاستری گزاشتم
... Header اطلاعات عنوان سند ...Deatil اطلاعات جزئیات سند و Cust که مشتریها و اطلاعات اونها در بندهای Detail می خوره و هر جدول یک سری اطلاعات دیگه !
headerو Detail با SerialNumber با هم مرتبط هستند و Cust و Detail هم با Codeو CustCode
این هم ارتباط

Select *
From Detail Left Join Cust On
Cust.Code=Detail.Cust_Code
Left Join Header On
Detail.SerialNumber= Header.SerialNumber

واسه هر جدول چه ایندکس هایی مناسبه !

AminSobati
چهارشنبه 22 آبان 1387, 11:59 صبح
دوست عزیزم اولا انتخاب همه فیلدها، باعث میشه شانس کمتری در بدست آوردن ایندکس مناسب داشته باشید. اگر استفاده از * ضرورت داره که هیچ اما اگر نداره فقط فیلدهای مورد نظر رو قید کنید. ثانیا یک Execution Plan لازمه پست کنین تا بشه ایندکس رو پیشنهاد کرد

amin_alexi
چهارشنبه 22 آبان 1387, 14:23 عصر
جداول بالا جداول فرضی بود !
در جداول حقیقی که DocH همون Header و DocB همون Detail و ACC همون Cust
و دستور SQL زیر رو اجرا کردم
روی ACC, DocB یک Cluster Index گذاشتم ....
و روی DocB دو Index یکی روی SerialNumber ودیگری روی Acc_code گذاشتم !

Select *
From DocB Left Join Acc On
Acc.Code=DocB.Acc_Code
Left Join DocH On
DocB.SerialNumber= DocH.SerialNumber
عکس Execution Plan رو هم فرستادم (از SQL 2000)!
حالا آیا این بهینه هست !؟

AminSobati
چهارشنبه 22 آبان 1387, 17:59 عصر
در نگاه اول جداول ACC و DOCB روی فیلد Code نیاز به ایندکس دارند. این دستور رو اجرا کنید و بعد Query بگیرید:
set statistics profile on

Resultset دوم رو پست کنین

amin_alexi
شنبه 25 آبان 1387, 09:25 صبح
آقای ثباتی من set statistics profile on رو اجرا کردم و بعد همون Query رو گرفتم !
اما متوجه تغییری نشدم !
یا یک Result خاص یا چیزی به اسم Resultset ندیدم
فقط یک Result داشت اون هم نتیجه Query (من از 2000 SQL استفاده می کنم)

AminSobati
شنبه 25 آبان 1387, 22:04 عصر
اگر Exec Plan رو فعال کردین، غیر فعالش کنین و بعد با set statistics profile on کوئری رو اجرا کنین. باید غیر از نتیجه Query شما، در ادامه یک نتیجه دیگه هم داشته باشه (نه بعنوان یک Tab جدید، بلکه در ادامه Result اصلی)

amin_alexi
یک شنبه 26 آبان 1387, 08:24 صبح
ممنون آقای ثباتی
من روی DocB روی Acc_Code و SerialNumber ایندکس گذاشتم و همچنین روی Acc روی Code و روی DocH هم روی SerialNnumber .....
من خروجی رو تو Excel گذاشتم ...
باز هم ممنون ...

AminSobati
دوشنبه 27 آبان 1387, 22:57 عصر
دوست عزیزم این ایندکس رو بسازین و تصویر Exec Plan به همراه Statistics Profile رو پست کنید:



create index ix1 on docb ([Acc_Code], [SerialNumber], [BandNo], [lBandNo], [Arz_Code], [Opr_Code],
[Comm], [Mkz_Code], [Bede], [Best], [Check_No], [Check_Date], [Taraf], [Bank], [DOCB])

amin_alexi
سه شنبه 28 آبان 1387, 09:38 صبح
ممنون آقای ثباتی
من ایندکس رو ساختم این هم نتیجه هاش که ضمیمه کردم ...
حالا چند تا سوال :چشمک:
از این statistics profile به چه صورت استفاده میشه !
یعنی از بررسی چه بخشی مشه فهمید کجای کار گیره !
و اینکه شما ix1 (همون ایندکسی که گفتین بسازم) رو که گفتین من بسازم از کجا نتیجه گرفتین !
و اصلا چرا یک ایندکس رو روی چند فیلد زدیم (به صورت ترکیبی)!
ممنون :لبخندساده:

AminSobati
شنبه 02 آذر 1387, 00:27 صبح
ظاهرا به صورت غیر حضوری بیش از این نمیشه براش کاری انجام داد... شرمنده
در مورد سوالتون، خود Exec Plan میگه که چه ایندکسی نیازه. فرضا وقتی Sort وجود داره، یعنی اگر ایندکس داشته باشید، اون Sort اتفاق نمیافته. و وقتی از خواندن یک جدول چند فیلد داره استخراج میشه، یعنی این فیلدها وجودشون در ایندکس میتونه مفید باشه

amin_alexi
شنبه 02 آذر 1387, 07:45 صبح
ظاهرا به صورت غیر حضوری بیش از این نمیشه براش کاری انجام داد... شرمنده

ممنون از راهنمایها تون من هم بیشتر از این توقع نداشتم ...
شما خیلی هم بیشتر از اون چیزی که فکر کردم کمک کردین ...
ممنون