PDA

View Full Version : index in view



حمیدرضاصادقیان
یک شنبه 18 تیر 1385, 06:53 صبح
سلام دوستان . میخواستم ببینم برای ایندکس گذاشتن روی یک view ایا حتما باید از نسخه خاصی از sql استفاده کنیم.؟ اخه یک جایی خوندم که حتما باید نسخه enterprise یا developer باشه که بشه روی View ها ایندکس زد.حالا اگه اینجوریه و من بخوام روی view های برنامه ام index بزنم در صورتی که نسخه sql که کاربران من با اون کار میکنن personal هست به مشکل برخواهم خورد؟

AminSobati
یک شنبه 18 تیر 1385, 09:14 صبح
سلام حمید جان،
متاسفانه این مطلب در بعضی منابع بصورت جالبی بیان نشده و باعث میشه مطلب کمی بد جا بیفته.
ببینید، ساخت ایندکس روی View در همه Editionها میسره اما مطلبی که هست اینه که آیا Query Optimizer خودش وجود این ایندکس رو تشخیص میده که موقع Query ازش استفاده کنه یا نه.
در Enterprise Edition این کار به صورت اتوماتیک انجام میشه و در صورتی که Indexed View بتونه کمک کنه به انجام یک Query، ازش استفاده میشه. اما در Personal Edition وجود ایندکس روی View به صورت اتوماتیک بررسی نمیشه و شما در Query که مینویسید باید Optimizer رو وادار به استفاده از Indexed View بکنید، با اضافه کردن NoExpand:


SELECT * FROM MyView WITH(NOEXPAND)
WHERE ...

لذا برای اطمینان از اینکه برنامه شما در هر Edition از SQL Server حتما از ایندکس روی View استفاده خواهد کرد، اینکه که NoExpand رو در Query قرار بدین. اما به چند نکته توجه داشته باشید:
1) همه Viewها قابلیت اینکه روی اونها ایندکس بسازید رو ندارند. یعنی Queryهای خاصی در View برای ایندکس ساپورت میشن
2) اطمینان باید داشته باشید که استفاده از Indexed View میتونه تاثیر مثبت بگذاره روی سرعت Query. چون وادار کردن Query Optimizer عملیه که باید با احتیاط و یقین انجام داد تا بلعکس نتیجه ضعیفتر نگیرید

odiseh
دوشنبه 19 تیر 1385, 07:20 صبح
سلام
من هر دو مطلب رو خوندم ولی نمی دونم که اصلا چطور میشه indexed view ایجاد کرد توی BOL هم چیزی در این مورد پیدا نکردم. این تالار رو هم search کردم ولی بی حاصل بود. لطفا منو راهنمایی کنید.

حمیدرضاصادقیان
دوشنبه 19 تیر 1385, 09:36 صبح
دوست عزیز در bol نام indexed view رو جستجو کنید.