လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> mysqli_result :: fetch_colum ကိုကော်လံတစ်ခုတည်းဒေတာကိုထုတ်ယူသောအခါ Memory Optimization အတွက်အသုံးပြုသည်

mysqli_result :: fetch_colum ကိုကော်လံတစ်ခုတည်းဒေတာကိုထုတ်ယူသောအခါ Memory Optimization အတွက်အသုံးပြုသည်

gitbox 2025-05-29

ပြုပြင်ခြင်းဒေတာဘေ့စ်စုံစမ်းမှုသည် PHP တွင်ရလဒ်များကို PHP တွင်ရလဒ်များရရှိပါက MySQLI_RESUTE_RESELD :: FETCH_CONDICH ကို အသုံးပြု. ရလဒ်အနေဖြင့်ကော်လံတစ်ခုကိုသာစိတ်ဝင်စားပါက၎င်းသည်အလွန်ထိရောက်သောနည်းတစ်နည်းဖြစ်သည်။ ဤချဉ်းကပ်မှုသည်ရိုးရာ fetch_assoc () သို့မဟုတ် fetch_row ()) သို့မဟုတ် fetch_row () ထက်မှတ်ဉာဏ်စုဆောင်းမှုသည်အထူးသဖြင့်အချက်အလက်အမြောက်အများကိုကိုင်တွယ်ရာတွင်ပိုမိုကောင်းမွန်သည်။ ဤဆောင်းပါးသည် PHP အစီအစဉ်များကိုတိုးတက်စေရန်အတွက် Fetch_Column () ၏စွမ်းဆောင်ရည်ကို အသုံးပြု. Memory အသုံးပြုမှုကိုမည်သို့ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရမည်ကိုလေ့လာလိမ့်မည်။

1 ။ စုံစမ်းမှုရလဒ်အတွက်ကော်လံအရေအတွက်ကန့်သတ်

မှတ်ဉာဏ်ကိုပိုမိုကောင်းမွန်စေရန်တိုက်ရိုက်နှင့်ထိရောက်သောနည်းလမ်းများအနက်မှတစ်ခုမှာ Select * ကို အသုံးပြုခြင်းအစား SQL Queries များတွင်သင်လိုအပ်သောကော်လံကိုသာရွေးချယ်ရန်ဖြစ်သည်။ ဥပမာအားဖြင့်:

 $result = $mysqli->query("SELECT username FROM users");

၎င်းသည်ဒေတာဘေ့စ်ဆာဗာမှ PHP သို့ကူးစက်သောအချက်အလက်ပမာဏကိုလျှော့ချနိုင်ပြီးအရင်းအမြစ်မှမှတ်ဥာဏ်သုံးစွဲမှုကိုလျှော့ချနိုင်သည်။

2 ။ Fetch_assoc () သို့မဟုတ် fetch_row အစား fetch_column () ကိုသုံးပါ။

FETT_AsSOC () Associative Array ကိုပြန်ပို့သည်။ Fetter_row () သည် index array () fetter_columm () ကိုတိုက်ရိုက်ပြန်ပို့သည်။

 while ($username = $result->fetch_column()) {
    // ကိုင်တွယ်ဖြေရှင်းသည်$username
}

ဤနည်းလမ်းသည်မလိုအပ်သောခင်းကျင်းမှုကိုမလိုအပ်ပါ။

3 ။ ဒေတာအားလုံးကို arrays သို့ cache ကိုရှောင်ပါ

ဘုံအလေ့အကျင့်သည်ရလဒ်အားလုံးကို array တစ်ခုထဲသို့ထည့်သွင်းရန်ဖြစ်သည်။

 $usernames = [];
while ($username = $result->fetch_column()) {
    $usernames[] = $username;
}

ဒေတာ volume သည်ကြီးမားလျှင်၎င်းသည်မှတ်ဥာဏ်အသုံးပြုမှုပမာဏများစွာကိုဖြစ်ပေါ်စေနိုင်သည်။ အပြောင်းအလဲနဲ့ယုတ္တိဗေဒကခွင့်ပြုမယ်ဆိုရင်ဒေတာအားလုံးကိုတစ်ပြိုင်နက်တည်းဖွင့်တာထက်စာဖတ်စဉ်ဖတ်ပြီးလုပ်ဆောင်ပါ။

 while ($username = $result->fetch_column()) {
    process_username($username); // 假设是某个ကိုင်တွယ်ဖြေရှင်းသည်函数
}

4 ။ ကျိုးကြောင်းဆီလျော်သော MySQLI buffering မဟာဗျူဟာကိုသတ်မှတ်ပါ

ပုံမှန်အားဖြင့် mysqli_query () client memory အတွက်ရလဒ်များအားလုံးက client memory ကို cachees ။ အကယ် . ဒေတာပမာဏသည်အထူးသဖြင့်ကြီးမားပါက,

 $result = $mysqli->query("SELECT username FROM users", MYSQLI_USE_RESULT);

ဤနည်းလမ်းသည်ရလဒ်အားလုံးကိုမှတ်ဉာဏ်ထဲသို့မတင်နိုင်ပါ, သို့သော်ကြားခံရခြင်းမရှိသောရလဒ်များသည်မပြုပြင်မီအခြားမေးမြန်းချက်များကိုမလုပ်ဆောင်နိုင်ကြောင်းသတိပြုရန်လိုအပ်သည်။

5 ။ PHP Memory ကန့်သတ်ချက်ကိုဆင်ခြင်နင်စွာပြင်ဆင်ပါ

သင်၏ PHP script သည်မြင့်မားသောဝန်များကိုလုပ်ဆောင်ပါက (ထိုကဲ့သို့သောဒေတာထုတ်ယူမှုအမြောက်အများကဲ့သို့) သင်၏ PHPP.ini တွင် memorter_limit ကို သေချာစွာသတ်မှတ်ရန်သေချာစေပါ။ ၎င်းကိုအောက်ပါနည်းလမ်းများဖြင့်ပြောင်းလဲနိုင်သည်။

 ini_set('memory_limit', '128M');

သို့သော် Memory Caps ကိုတိုးမြှင့်ခြင်းထက်ပရိုဂရမ်ယုတ္တိဗေဒကိုပိုမိုကောင်းမွန်စေရန်ပိုကောင်းသည်။

6 ။ Memory အသုံးပြုမှုကိုထပ်မံလျှော့ချရန်မီးစက်ကိုသုံးပါ

ကော်လံတန်ဖိုးများစွာကိုပြန်ပို့ရန်လိုအပ်သောလုပ်ဆောင်ချက်များအတွက်မီးစက်သည်နှောင့်နှေးသောတင်ခြင်း၏အကျိုးသက်ရောက်မှုကိုပေါင်းစပ်နိုင်သည်။

 function get_usernames(mysqli_result $result): Generator {
    while ($username = $result->fetch_column()) {
        yield $username;
    }
}

// အသုံးပြု
foreach (get_usernames($result) as $username) {
    process_username($username);
}

မီးစက်၏အားသာချက်မှာ၎င်းသည်ဒေတာအားလုံးကိုမှတ်ဉာဏ်ထဲသို့မထည့်သွင်းနိုင်သည့်အရာမှာ၎င်းသည်ကြီးမားသောရလဒ်အစုံများကိုကိုင်တွယ်ရန်အထူးသင့်လျော်သည်။

အကျဉ်းချုပ်

MySQLI_RESULT :: FETT_COLUCH () သည်မှတ်ဉာဏ် optimization လေ့ကျင့်ခန်းတစ်ခုဖြစ်သော်လည်း, ဤ optimization နည်းလမ်းများသည်များစွာသောအချက်အလက်ပမာဏနှင့်အတူအခြေအနေများနှင့်အတူအခြေအနေများအတွက် processing များအတွက်အထူးသဖြင့်အရေးကြီးသောဖြစ်ကြသည်။

စွမ်းဆောင်ရည်မြင့်မားသော PHP နှင့်ပတ်သက်သည့်ပိုမိုလက်တွေ့ကျသောအတွေ့အကြုံများကို database များနှင့်အပြန်အလှန်ဆက်သွယ်ခြင်းတွင် https://gitbox.net/php-db-optimization တွင်တွေ့နိုင်သည်