PDA

View Full Version : index گذاری بیش از حد در mysql



erfannorouzi
جمعه 18 اردیبهشت 1394, 17:20 عصر
با سلام و خسته نباشید خدمت اساتید محترم

در حال طراحی دیتابیس بودم که برای اولین بار جدول رو index گذاری کردم اما در بعضی از تیبل ها تعداد ایندکس هام تا مورد هم رسیده آیا این مشکلی ایجاد میکنه؟
و سوال بعدی که برام پیش اومد درباره relation ها در میان تیبل ها بود تعداد relation هایی هم که به هم وصل کردم بسیار زیاده آیا باعث کم شدن پرفومنس واکشی یا اینزرت در دیتابیس میشه؟

تصویری از دیتابیس
131011

تشکر

Unique
جمعه 18 اردیبهشت 1394, 22:58 عصر
ایندکس ها اگه به درستی ایجاد شده باشن و موقع query شما performance خوبی بگیری مورد نیاز هستند و تعدادشون مهم نیست البته روی حجم پایگاه شما اثر میگذاره که در بسیاری از موارد قابل چشم پوشیه. در مورد relation ها هم خوب وقتی جداول زیاد و با کلید های خارجی به هم مرتبط باشن تعدا relation ها زیاد میشه.

پ.ن : کیف میکنم تو انجمن Screenshot های لینوکسی زیاد و زیادتر میشه.

rezakho
جمعه 18 اردیبهشت 1394, 23:59 عصر
اندیس ها همه جا هم خوب نیستند!

کلا اندیس ها برای جداول و فیلدهایی خوبند که خواندن و جستجو در اونها بسیار بیشتر از نوشتن باشه، چون اندیس ها عملیات نوشتن و ویرایش در جدول رو به دلیل بازچینی درخت های اندیس، کند میکنه و این کندی در رکوردهای بالا، کاملا محسوسه.
اگر عملیات جستجو در فیلدهای موردنظر زیاد هست و در عوض درج و ویرایش کم، اندیس ها می تونند خیلی مفید باشند، در غیر اینصورت نه.


چند نکته هم در مورد ریلیشن ها:

1- ریلیشن ها، به خودی خود باعث کندی نمی شند، مگر اینکه عملیاتی که به عنوان تریگر و ... روی جدول تعریف می کنید، تغییراتی روی فیلدهای ریلیشن شده بگذاره.
2- اگر از قابلیت های ریلیشن ها استفاده نمی کنید (مثل حذف یا ویرایش آبشاری و ...)، نیازی به ریلیشن در سطح پایگاه داده نیست! و همون جوین های درون SQL کافیه.
3-جوین ها، یکی از مهمترین دلایل پایین اومدن کارایی پایگاه داده اند که برای حل این مشکلات باید به دنرمالسازی روی بیارید.

behnamy01
یک شنبه 20 اردیبهشت 1394, 13:15 عصر
کلا اندیس ها برای جداول و فیلدهایی خوبند که خواندن و جستجو در اونها بسیار بیشتر از نوشتن باشه



یادمه قبلا یک مقاله در مورد ایندکس گذاری میخودم که گفته بود به غیر از راه های معمولی که خود برنامه نویس باید بفهمه کدوم فیلد رو index کنه، یکی از راه های ساده تر اینه که یک کوئری میزنید و اون کوئری table رو آنالیز میکنه و میگه مثلا بیشترین گیر کار روی فلان فیلد هستش و شما هم یک چک میکنی و اگر دیدی با اون فیلد زیاد سرکار داری و زیاد select میکنیش، میای و اون فیلد رو Index میکنی. شما میدونی اون کوئری چیه؟ و یا راه مشابه ای؟

rezakho
دوشنبه 21 اردیبهشت 1394, 09:52 صبح
باید از MySQL Query Analyzer استفاده کنید، که البته در نسخه اینترپرایز هست و پولی
به گمانم نسخه 1 ماه آزمایشی داره