PDA

View Full Version : نحوه ایندکس گذاری صحیح



Cave_Man
یک شنبه 20 آبان 1386, 17:16 عصر
با سلام و خسته نباشید

سیستمی دارای یک Table مرکزی هست که بیشتر عملیات در اون انجام میشه و بیشتر گزارشات هم از اون تهیه میشه.(ویرایش و حذف و اضافه زیاد و همچنین Query برای گزارشات زیاد)
بیش از 20 فیلد در این Table موجود هست با یک فیلد کلاستر شده.

حال سوال من این هست که با توجه به اینکه هم حجم ویرایش ها و هم حجم گزارشات در این Table زیاد هست چگونه ایندکس گذاری کنم؟
میشه گفت که گزارشات روی اگثر فیلد ها انجام میشه (یعنی اکثر قریب به اتفاق فیلد ها در WHERE ظاهر میشن)
راه حل و پیشنهاد شما برای ایندکس گذاری چیست؟

AminSobati
یک شنبه 20 آبان 1386, 23:27 عصر
دوست عزیزم،
در طراحی و پیاده سازی دیتابیس، ساخت ایندکس بعد از بدست آمدن همه Queryها انجام میشه. یعنی تا Query نباشه، نمیتونیم ایندکس مناسب و کارآمد رو تشخیص بدیم. به عبارت بهتر، اصلا ایندکس "برای" Query ساخته میشه

Cave_Man
دوشنبه 21 آبان 1386, 10:23 صبح
ضمن تشکر از آقای ثباتی عزیز
Query ها همه آماده هست و تهیه شده .
مسئله این هست که طبق فرمایشات گذشته شما, استفاده از Index باید با احتیاط خاصی باشه.جداولی که زیاد ویرایش و حذف و اضافه در اونها اتفاق می افته نباید زیاد ایندکس بشن؟ همون طوری که بنده در پست اول هم گفتم در این Table هم Query زیاد هست و هم عملیات درج و حذف .
حالا به نظر شما تکلیف چیست؟ با توجه به زیاد بودن عملیات INSERT , DELETE من از ایندکس زیاد استفاده نکنم؟(هر فیلدی که در WHERE دیدم رو ایندکس نکنم؟و فقط فیلد های مهم تر رو ایندکس کنم؟)
یا اینکه به خاطر وجود Query های زیاد هر فیلدی که در WHERE و ORDER ظاهر شد رو بدون توجه به عملیات درج و حذف ایندکس کنم؟

Cave_Man
سه شنبه 22 آبان 1386, 00:12 صبح
آقای ثباتی و دیگر دوستان سوالات بنده جوابی نداره؟

AminSobati
سه شنبه 22 آبان 1386, 00:17 صبح
در سیستمهایی که نوعا من و شما کار میکنیم، سربار یک ایندکس در مقابل منفعتش بسیار ناچیزه. مثلا وجود یک ایندکس شاید چند صدم ثانیه یک insert رو کند کنه اما نبودنش ممکنه باعث بشه 30 ثانیه Query طولانی تر بشه. این درست نیست که بگیم جداولی که زیاد ویرایش میشن نباید ایندکس داشته باشند. منظور من از "احتیاط" این هست که ایندکسی بسازیم که واقعا به حال یک یا چند Query مفید باشه، نه اینکه فقط سربار سیستم باشه.
اینکه هر فیلد موجود در WHERE کاندید برای ایندکس هستش، یک دستورالعمل بسیار ابتدایی و کلی هست که "گاهی" به هدف میخوره!