ایندکس دیتابیس چیست؟
ایندکس یک ساختار کمکی برای پیدا کردن سریعتر رکوردهاست. وقتی روی ستونی که مرتباً در جستوجو، sort یا join استفاده میشود ایندکس مناسب داشته باشید، دیتابیس در بسیاری از سناریوها میتواند به جای بررسی تمام رکوردها مسیر بهینهتری انتخاب کند.
چه ستونهایی کاندید ایندکس هستند؟
ستونهایی که در فیلترها، joinها و مرتبسازیهای پرتکرار استفاده میشوند معمولاً کاندید مناسبی هستند. اما هر ستون را نباید بدون تحلیل index کرد؛ ایندکس فضای ذخیرهسازی میگیرد و هزینه عملیات write را هم افزایش میدهد.
در Django چگونه ایندکس تعریف کنیم؟
میتوان در Meta مدل Django، ایندکسهای موردنیاز را به شکل declarative تعریف کرد و سپس migration ساخت. ترکیب چند ستون هم در بعضی queryها بهتر از چند ایندکس جداگانه عمل میکند، اما ترتیب ستونها باید با الگوی query هماهنگ باشد.
قبل از افزودن index چه چیزی را بررسی کنیم؟
اول query واقعی را مشاهده و اندازهگیری کنید. QuerySetهایی که N+1 Query ایجاد میکنند، select_related و prefetch_related نامناسب یا فیلترهای سنگین دارند ممکن است بدون افزودن index هم قابل بهینهسازی باشند.
ایندکس همیشه پاسخ نیست
اگر selectivity پایین باشد یا جدول کوچک باشد، دیتابیس ممکن است استفاده از index را انتخاب نکند. همچنین ایجاد indexهای زیاد میتواند عملکرد write و اندازه دیتابیس را تحت تأثیر قرار دهد. تصمیم باید با اندازهگیری و ابزارهای تحلیل query انجام شود.
جمعبندی
Performance دیتابیس از مدل داده و query شروع میشود. ایندکس ابزار قدرتمندی است، اما باید بر اساس الگوی واقعی دسترسی به داده و با اندازهگیری قبل و بعد از تغییر استفاده شود.