View Full Version : ایندکسها چه کاربردی دارن؟
oliya24
پنج شنبه 27 مرداد 1390, 23:20 عصر
سلام دوستان کسی میدونه ایندکسها چی هستن و چه کاربردی دارن؟؟ ودر چه مواقعی استفاده میشن؟؟؟؟؟؟؟
متشکرم
oliya24
جمعه 28 مرداد 1390, 03:25 صبح
مشکلم حل شد دوستان ایندکسها برای افزایش سرعت و دسترسی سریعتر به اطلاعات میباشد
اگر هم بخوام مثالی بزنم مثال اقای صادقیان را میزنم که ایندکس رو به فهرست کتاب تشبیه کرده بودن بنده از ایشان تشکر میکنم
و این هم برای دوستان عزیز عرض کنم که خود دستوراتی که ما مینویسیم تقریبا میشه گفت از ایندکسها استفاده میکنن
با تشکر از اقای صادقیان
من شرمندم که این تاپیک رو ایجاد کردم اصلا فراموش کردم که تو این سایت جستجو باید بکنم
امیدوارم اقای صادقیان این جسارت بنده رو ببخشن
AminSobati
جمعه 28 مرداد 1390, 21:53 عصر
http://www.barnamenevis.org/forum/showthread.php?t=9498
http://www.barnamenevis.org/forum/showthread.php?t=37664
oliya24
شنبه 29 مرداد 1390, 03:46 صبح
منم با اجازه میخواستم بیشتر توضیح بدم:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@؟
ایندکسها:
برای بازیابی اطلاعات از جداول 2 روش وجود دارد که عبارتند از:بازیابی به روش ترتیبی
2:بازیابی به روش مستقیم
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
بازیابی به روش ترتیبی:در این روش برای بازیابی اطلاعات باید کلیه رکروردهای جدول را مقایسه کرد تا رکرودهای مورد نظر را بتوان بازیابی نمود خوب حال اگرتعداد رکوردهای جدول زیاد باشه چی؟؟؟؟؟؟؟؟؟؟؟؟؟سرعت در بازیابی خیلی پایین می اید
2:بازیابی به روش مستقیم: در این روش مستقیما میتوان به رکوردهای مورد نظر رفته انها را بازیابی نمود برای اینکه بتوان از بازیابی مستقیم استفاده کرد جداول باید بر اساس فیلد مورد نظر مرتب باشند برای مرتب سازی میتوان بر اساس فیلدهای مورد نظر ایندکس ایجاد کرد دلایل زیادی برای استفاده از ایندکس وجود داردکه برخی از انها عبارتند از:بالا بردن سرعت جستجو و بازیابی اطلاعات -2-ایجاد رکوردهای یکتا درجداول-3-ایندکس میتواند برای ارتباط بین جداول نیز به کار برود
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!
انواع ایندکس:1:خوشه ای 2:غیر خوشه ای
هر یک از این ایندکسها میتواند یکتا یا غیر یکتا باشد که در ادامه خدمت دوستانم عرض میکنم
ایندکسهای خوشه ای:این نوع ایندکسها داده ها را به همان ترتیبی که در جدول ذخیره میشن در ایندکس مرتب میکند یعنی داده مجددا مرتب میشود و نیاز به ساختار ایندکس کاملا مجازی ندارد این ایندکسها معمولا برای مواردی استفاده میشن که بخواهید محدوده ای از اطلاعات رو جست و جو کنید به عنوان مثال فرض کنید بخواهید که لیست دانشجویانی را مشاهده کنید که نام انها با حرف c,d شروع میشن یک روش انجام کار این است که در جدول مربوطه اسامی را بر حسب نام مرتب کنید و اولین رکوردی را پیدا کنید که با نام C شروع میشود سپس تمام رکوردها را تا رسیدن به اولین رکوردی که با نام E شروع میشود پیمایش کنید این روش ایندکس خوشه ای نام دارد
در هنگام استفاده از این نوع ایندکس باید توجه داشت که هر جدول حداکثر میتواند یک ایندکس خوشه ای داشته باشد زیرا داده ها از نظر فیزیکی به تر تیب کلید ایندکس مرتب میشوند اگر برای یک جدول چند ایندکس خوشه ای تعریف کنید اس کیو ال سرور چند کپی از جدول را نگهداری میکند
2:ایندکسهای خوشه ای برای فیلدهایی که حاوی تعداد کمی اطلاعات هست بسیار مفید است به عنوان مثال تعداد گروه های اموزشی در دانشگاه برای ایجاد خوشه ای مفید میباشد
این مطلب ادامه دارد
منتظر باشید دوستان
در هنگام ایجاد ایندکس خوشه ای باید به نکات زیر توجه کنید
Galawij
شنبه 29 مرداد 1390, 06:49 صبح
فکر می کنم توضیحاتی که قبلاً جناب ثباتی دادن، کامل هست دیگه نیازی به توضیح ندارد!
oliya24
شنبه 29 مرداد 1390, 15:23 عصر
ادامه بحث :استفاده از ایندکسهای خوشه ای
3:سومین مزیت ایندکس خوشه ای:ایندکس خوشه ای برای فیلد هایی که که تعداد مقادیر انها کم است مفید نیسسسسسسسسسست دقت کنید نیست و نخواهد بود چون دلیلی نداره که استفاده کنیم مقادیر درون فیلد کم است
4:اگر جدولی بر اساس فیلد خاص زیاد مورد دستیابی قرار میگیرد بهتر است برای ان جدول بر اساس همان فیلد ایندکس خوشه ای تعریف کنیم
5:اگر جدولی زیاد مورد دستیابی قرار میگیرد و حجم زیادی از اطلاعات ان مورد بازیابی قرار میگیرد بهتر است برای ان جدول ایندکس خوشه ای تعریف کنیم
6:گفته شده که اگر برای بازیابی داده های جدول از عملگرهای between ,<,>,=>,=<استفاده میکنیدبهتر است برای ان جدول ایندکس خوشه ای تعریف نکنید
7:ایندکس خوشه ای حداقل به فضای 120 درصد حجم جدولی نیاز است که ایندکس خوشه ای تعریف شود این فضا فضای کاری نام دارد این فضای ازاد باید در بانک اطلاعاتی موجود باشد و گرنه نمیتوان ایندکس خو شه ای را برای جدول تعریف کرد . به عنوان مثال فرض کنید یک بانک اطلاعاتی دارید که حجم ان 800 مگابایت است و در این بانک جدولی وجود دارد که 200 مگابایت فضا را اشغال کرده است برای ایجاد ایندکس خوشه ای برای این جدول حداقل 240 مگابایت از بانک اطلاعاتی باید خالی باشد
8:برای ایجاد ایندکسها باید ابتدا ایندکس خوشه ای را برای جدول ایجاد نمایید سپس ایندکسهای غیر خوشه ای را ایجاد کنید
oliya24
شنبه 29 مرداد 1390, 16:22 عصر
ایندکس های غیر خوشه ای :
در این نوع ایندکسها ترتیب داده های ایندکس با ترتیب داده های جدول یکی نیست زیرا این نوع ایندکسها داده ها را به صورت فیزیکی مرتب نمیکنند این نوع ایندکسها به فهرست کتاب شبیه هستند یعنی برای ایجادهر یک از این نوع ایندکسها - یک ساختار مجزایی نگهداری میشود وقتی sql server جستجو میکند ابتدا این مقدار در ساختار پیدا میکند .سپس به جدول مراجعه کرده داده ها را از محلی که ساختار ایندکس تعیین میکند بازیابی مینماید برخی از مزایای استفاده از ایندکس غیر خوشه ای به شرح زیر میباشند:
1:برای هر جدول میتوان حداکثر تا 249 ایندکس غیر خوشه ای تعریف کرد ولی فقط یک ایندکس خوشه ای میتوان برای هر جدول ایجاد کرد
2:اگر میخواهد از تقاضا هایی استفاده کنید که حجم زیادی از داده های جدول را بازیابی نمکند بهتر از ایندکس غیر خوشه ای استفاده کنید
3:فیلد هایی که حجم زیادی از مقادیر انها یکتا است مثلا ادرس دانشجو یا نام خانوادگی در این صورت بهتر است برای بازیابی این داده ها از ایندکس غیر خوشه ای استفاده کنید
4:اگر بخواهید داده های یک جدول را بر اساس چند فیلد مرتب بکنید بهتر است از ایندکس غیر خوشه ای استفاده کنید زیرا ایندکس خوشه ای فقط بر اساس یک فیلد ایجاد میشود
5:فیلد هایی که مکررا در عبارت whereدستور select مورد استفاده قرار میگیرند و دقیقا مقادیر مورد نظر را بازیابی میکنند بهتر است برای ان فیلدها ایندکس غیر خوشه ای ایجاد کنید
oliya24
شنبه 29 مرداد 1390, 17:27 عصر
ایندکسهای یکتا:
ایندکس های یکتا را به طور مجزا نمیتوان ایجاد کرد بلکه این ایندکسها را میتوان به عنوان بخشی از ایندکسهای خوشه ای یاغیر خوشه ای ایجاد نمود این نوع ایندکسها تضمین میکنند که رکوردهای جدول بر اساس این فیلد یکتا باشند به عنوان مثال اگر بخواهید برای جدول دانشجو شماره دانشجویی را ایندکس ایجاد کنید باید نوع ایندکس را یکتا انتخاب کنید زیرا هیچ دو دانشجویی وجود ندارند که شماره دانشجویی انها یکی باشد ایندکسهای خوشه ای کاندیدهای خوبی برای ایندکسهای یکتا هستند زیرا sqlserver از نظر فیزیکی انها را به صورت یکتا ایجاد میکند
oliya24
شنبه 29 مرداد 1390, 17:34 عصر
ایندکسهای غیر یکتا:
برای فیلدهایی به کار میرود که امکان دارد مقادیر تکراری در جدول موجود باشند به عنوان مثال فرض کنید بخواهید ایندکسی بر اساس نام دانشجو ایجاد کنید نوع ایندکس را باید غیر یکتا تعریف کنید زیرا ممکن است چند دانشجو در یک دانشگاه دارای یک نام باشند برای ایجاد ایندکسهای غیر یکتا باید نوع ایندکس را غیر خوشه ای در نظر بگیرید زیرا sql server یک فیلد دیگر به جدول اضافه میکند که یکتایی را ایجاد میکندکه این فیلد از دید برنامه نویس پنهان خواهد بود
oliya24
شنبه 29 مرداد 1390, 17:41 عصر
ایندکسهای صعودی و نزولی:
به طور پیش فرض ایندکسها به صورت صعودی در نظر گرفته میشن در ایندکسهای صعودی داده های عددی از کمترین مقدار به بیشترین مقدار و داده های رشته ای از a به z و داده های تاریخ از قدیمیترین تاریخ به جدید ترین تاریخ مرتب خواهند شد ولی میتوانید ایندکس را طوری در نظر بگیرید که اطلاعات را به صورت نزولی مرتب کند در این صورت داده های عددی از بزرکترین به کوچکترین عدد داده های رشته ای از z به a ,داده های تاریخ ازجدیدترین به قدیمی مرتب خواهند شد
oliya24
شنبه 29 مرداد 1390, 17:52 عصر
چه هنگام نباید از ایندکس استفاده کرد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
همانطور که گفته شد ایندکس سرعت بازیابی را بالا میبرد اما در بعضی از موارد استفاده از ایندکس پیشنهاد نمیشود که عبارتند از:
اگر جدول کوچک باشد استفده از ایندکس سرعت را افزایش نمیدهد
2:استفاده از ایندکس زمانی باعث افزایش سرعت بازیابی اطلاعات در تقاظاها میشود که نتیجه تقاضا کمتر از 25% رکوردهای جدول باشد رکوردهای جدول باشد در غیر این صورت نه تنها ایندکس سرعت بازیابی را افزایش نمیدهد بلکه باعث کاهش سرعت بازیابی میشود
3:ایندکسها سرعت بازیابی را افزایش میدهند ولی سرعت اضافه کردن -حذف کردن-و به روز رسانی رکوردها را کاهش میدهد اگر جدولی دارید که اعمال تغییرات در ان زیاد است بهتر است برای این جدول ایندکس ایجاد نکنید
4:برای مقادیری که در یک فیلد قرار میگیرند اگر کمتر از مقدار null ایندکس نسازید
5:برای فیلدهایی که زیاد ویرایش میشوند ایندکس نسازید
6:سعی نکنید ایندکس و جدول مربوط به انرا در یک درایو قرار دهید بهتر است در 2 درایو مجزا قرار دهید زیرا سرعت بازیابی اطلاعات را افزایش میدهد
oliya24
شنبه 29 مرداد 1390, 22:06 عصر
ایجاد ایندکس در بانک اطلاعاتی sql server
برای ساخت ایندکس در اس کیوال سرور میتوانید از دستور زیر استفاده کنید:
create index
این دستور پارامتر های زیادی دارد که از حوصله نوشتن من خارج است پس کار را با ذکر چند مثال شروع میکنم
create index idx_fname on bb(fname)
این دستور ایندکسی به نام idx_fname ایجاد کرده و بر روی جدول bb و فیلد fname
یا در مثال زیر
CREATE IDX_NAME ON BN(NAME DESC)
این دستور هم مشابه بالا یه ایندکس تعریف میکند و خروجی ان رکوردها را به ترتیب نزولی مرتب میکند
oliya24
شنبه 29 مرداد 1390, 22:14 عصر
ایجاد ایندکس بر اساس چند فیلد
اگر ایندکسی را بر اساس چند فیلد ایجاد کنید رکوردها بر اساس فیلد اول ایندکس مرتب میشوند اگر رکوردهایی موجود باشند که مقدار فیلد اول انها با هم بربر باشد این رکوردها بر حسب فیلد دوم ایندکس مرتب خواهند شد و این روند ادامه میابد
به مثال زیر توجه کنید
CREATE INDEX IDX_LNAME_FNAME ON BB(LNAME,FNAME)
برای دیدن جدول هم SELECT بزنید
oliya24
شنبه 29 مرداد 1390, 22:38 عصر
به کار گیری کلمه کلیدی UNIQUE در دستور CREATE INDEX
برای انکه رکوردهای حاوی مقادیر تکراری ئر جدول پدید نیاید میتوان در دستور ساخت ایندکس از این کلمه استفاده کرد
فرض کنید که میخواهید جدولNN را وادار کنید که از قاعده زیر پیروی کند هر صورت حسابی باید از حساب بانکی متفاوت پرداخت شود برای اعمال این محدودیت باید یک ایندکس یکتا بسازید
CREATE UNIQUE INDEX ALB ON BN(FNAME)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.