جشنواره عیدانه راکت | عضویت ویژه راکت برای آخرین بار | افزایش قیمت‌ها از سال جدید | و ...

مشاهده اطلاعات بیشتر...
ثانیه
دقیقه
ساعت
روز
smart
5 سال پیش توسط smart مطرح شد
8 پاسخ

ایندکس گذاری برای کاهش زمان پاسخ روی ستون های timestamp

سلام. وقت بخیر. من یه جدول محصولات دارم که هر محصول یه دوره "در دسترس بودن" داره. یه ستون به اسم begin_time و یه ستون دیگه به اسم end_time داره که زمان شروع و پایان در دسترس بودن هر محصول رو مشخص میکنه.
کاربرا توی بخش فیلتر میتونن یه دوره زمانی رو مشخص کنن که محصولات در دسترس رو تو اون دوره نشون میده. این دوره هم میتونه از چند ساعت تا چند هفته باشه. مثلا محصولات در دسترس از امروز تا یه ماه دیگه.
کوئری که نوشتم اگه محصولی پیدا بشه بدون مشکل کار میکنه و سریع هم هست. ولی وقتی توی اون دوره زمانی محصولی پیدا نشه، کل جدول رو میگرده که بتونه محصول در دسترس پیدا کنه. نکته اینکه این جدول چندین میلیون رکورد داره. و خب تا گشتن کل این رکوردا زمان خیلی زیادی طول میکشه.
من خواستم با index گذاری روی brgin_time و end_time این زمان رو کم کنم ولی تاثیری نداشت. شاید به خاطر اینکه begin_time محصولات تقریبا همه با هم متفاوتن. end_time هم همینطور.
میخواستم ببینم راه حلی هست که بشه این زمان رو کم کرد ؟ ایندکس گذاری راه حله؟ یا روش دیگه ای هست ؟


ثبت پرسش جدید
Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@smartgarden2016

پیشنهاد من ایجاد فیلتر های بیشتر هست
اگر به فرض فقط 2 تا فیلتر باشه که کالا هایی که موجود هست رو بده از فلان تایمن تا فلان تایم
خب کوئری بزنید رکورد زیاد باشه تحلیلش زیاد میشه!
ولی به فرض تو دسته پوشاک ، شلوار ، آبی ها ، کدوما موجودن...!
این میتونه تو کوئری خیلی تاثیر داشته باشه

pagination هم فراموش نش تو این مواقع!!


smart
@smartgarden2016 5 سال پیش آپدیت شد
0

درود @Alimotreb
اصل بخش فیلتر همین هست. و باید به این شکل باشه. و در کل مشکلی هم نداره البته. pagination هم انجام میشه.
فقط توی یه حالت که طبق ورودی ها محصولی رو پیدا نمیکنه مجبوره کل جدول رو بگرده که همین باعث میشه زمان زیادی طول بکشه.

البته باید بگم تست کردم با حدود 500000 پانصدهزار رکورد روی یه هاست خیلی خیلی معمولی همین بخش دوم هم در حد میلی ثانیه طول میکشه ولی وقتی به چندین میلیون رکورد برسه ممکنه تاخیر داشته باشه.


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@smartgarden2016

در کل به نظرم اون تایم زیاد محسوس نیست
روی Mysql 5.7
و حتی mariadb عملکرد بسیار خوبی داره به طوری که شما حس نمیکنی!


smart
@smartgarden2016 5 سال پیش مطرح شد
0

سلام. وقت بخیر
@Alimotreb
آقا توی همین سوال یه موردی پیش اومده. با همین تعداد رکورد روی یه سرور خیلی معمولی (200 مگ حافظه و 1گیگ رم) اگه کوئری فیلتری که زده میشه نتیجه پیدا کنه که سریع هست و مشکلی نداره ولی وقتی چیزی پیدا نمیکنه و مجبوره کل دیتابیس رو بگرده حدود 2 ثانیه طول میکشه اونم با 400000 چهارصدهزار رکورد! که خب خیلی خیلی زمان زیادی هست و وقتی به چند میلیون رکورد برسه میره تا 40-50 ثانیه!. من کلی تست کردم دیدم وقتی هیچ ایندکسی روی جدول نباشه حتی ایندکس primary هم که نباشه جای 2 ثانیه حدود 200 میلی ثانیه طول میکشه. ولی وقتی ایندکس هست اونقدر طول میکشه.
به نظر شما مشکلش چیه؟ چطور میشه این زمان رو بهینه کرد؟


مهدی
@code2code 5 سال پیش مطرح شد
0

@smartgarden2016
یه سوال چرا از ذخیره سازی زمان به صورت integer استفاده نمیکنی؟؟؟؟ فوق العاده زمان رو کاهش میده


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@smartgarden2016

ایندکس گذاری در برخی جاها که جز اصولش هست و بعید میدونم اختلالی در سرعت ایجاد کنه
سرعت پردازش و خروجی دیتا ، یکی از دلایل اصلیش منابع سرور هست !ً


smart
@smartgarden2016 5 سال پیش مطرح شد
0

@code2code
نوع فیلترها و مقایسه یه حالتی داره که باید timestamp باشه.

@Alimotreb
والا منم تعجب کردم که با اون ایندکس سرعت اینقدر کم شد.
یعنی اگر جای هاست یه سرور خوب بگیرم این زمان کاهش پیدا میکنه ؟ من میخوام این 2 ثانیه به حدود 30-40 میلی ثانیه برسه که بعدا مشکلی ایجاد نشه


مهدی
@code2code 5 سال پیش مطرح شد
0

میشه بگی چه نوع فیلتریه که نمیشه روی اون حالت integer زد؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام