اپتیمایز کردن query

bono056

Member
سلام
چرا order by اینقدر سرعت اجرای query ها رو کند میکنه؟ من یه فیلد دارم که ایندکس هم شده. این فیلد هم تو where استفاده شده هم تو Order by. وقتی فقط تو قسمت where هست زمان اجرا 0.2 ثانیه است ولی وقتی همون فیلد و تو order by میارم زمان 2 ثانیه میشه.

کد:
SELECT * FROM tbl1 WHERE 1 =1 AND flag1=1 LIMIT 10(Query took 0.2401 sec)
SELECT * FROM tbl1 WHERE 1 =1 AND flag1=1 ORDER BY flag1 LIMIT 10(Query took 2.1315 sec)

برای optimize کردن و پائین آوردن زمان اجرای query دوم چیکار میشه کرد؟
 
آخرین ویرایش:

tabib_m

Member
بهترین کار همون index کردن بود که میگی انجام دادی
خوب وقتی طول میکشه، یعنی این که یا سرور اجرا کننده ضعیفه یا این که جدولت خیلی بزرگ و پر اطلاعات هست، یا این که سر سرور شلوغه :) . بهتره اینجوری بگم، میزان اطلاعات داخل دیتابیس و مراجعه ها و ... در حد کشش سرور نیستن!
در این صورت طبیعتا نباید انتظار داشته باشی که این کوئری رو در کمتر از دو ثانیه برات انجام بده!

البته، اگه منظورت دقیقا همین کوئری ای باشه که نوشتی، سورت توش معنا نداره، چون گفتی جاهایی که flag1 برابر با 1 هست. این یعنی مقدار این فیلد در تمامی رکوردهای نتیجه، برابر با یک هست. حالا سورت کردنش چیه دیگه؟
 

bono056

Member
این یه مثاله عزیز. میخواستم بگم همین فیلد تو قسمت where هم هست. جدول حدود 800 هزار تا رکورد داره. ولی عجیبه که order by اینقدر زمان اجرا رو میبره بالا.
 

tabib_m

Member
همونطور که گفتم بهترین کار ایندکس کردن بود که انجام دادی.
البته
ساختار و محتویات جدول هم مهم هستن
ممکنه بتونی اطلاعاتت رو طوری توی جدول بچینی که برای سورت کردن راحتتر باشی. که این مسئله هم کاملا مربوط میشه به ساختار جدولت و محتویاتی که در فیلدهاش میریزی و و و ...

در ضمن، اگر همیشه میخوای با همین فیلد سورت کنی، بهتره که فیلد پیشفرض سورت رو همین فیلد تعیین کنی.

موفق باشید.
 

جدیدترین ارسال ها

بالا