အဆိုပါ fetch_all () နည်းလမ်းသည်အချက်အလက်အားလုံးကိုအချက်အလက်အားလုံးကိုဆွဲယူပြီးတစ်ပြိုင်နက်တည်းမှတ်ကိုမှတ်ဉာဏ်ထဲသို့ဆွဲယူပြီးနှစ်ဖက်ရှိခင်းကျင်းမှုကိုပြန်လည်ရရှိခဲ့သည်။ အားသာချက်မှာ code သည်ရိုးရှင်းပြီးတပ်ဆင်ခြင်းကိုတိုက်ရိုက်ကိုင်တွယ်ရန်အဆင်ပြေသည်။ ဆိုးကျိုးများမှာရလဒ်သတ်မှတ်ချက်သည်အလွန်ကြီးမားသည့်အခါမှတ်ဥာဏ်သုံးစွဲမှုသည်မြင့်မားသည်။ ၎င်းသည်ပရိုဂရမ်ကိုတုန့်ပြန်မှုနှေးကွေးစေနိုင်သည်။
ဥပမာအားဖြင့်:
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$result = $mysqli->query("SELECT * FROM large_table");
$data = $result->fetch_all(MYSQLI_ASSOC);
print_r($data);
?>
ဤကုဒ်တွင် Fetch_all () သည် ဒေတာအားလုံးကို ကြီးမားသော ဒေါ်လာဒေတာ ခင်းကျင်းမှုကိုတစ်ပြိုင်တည်းဖတ်လိမ့်မည်။
ဒေတာ volume သည်သေးငယ်သော်လည်း Fetch_all () သည် စွမ်းဆောင်ရည်တွင်ပိတ်ဆို့မှုလုံးဝမရှိနှင့်အလွန်ထိရောက်သည်။ ရလဒ်အနေ ဖြင့် ထောင်ပေါင်းများစွာသောသောင်းချီသောထောင်ပေါင်းများစွာသောအတန်းများသို့ရောက်လျှင်, ရာနှင့်ချီသောအတန်းများသို့မဟုတ်ထိုထက်ပိုသော,
မှတ်ဉာဏ်အသုံးပြုမှုမြင့်တက်ခြင်း - ဒေတာအားလုံးကိုတစ်ပြိုင်နက်တည်းတင်ပြီးမှတ်ဉာဏ်အသုံးပြုမှုသည်အချက်အလက်ပမာဏနှင့်အချိုးကျသည်။
တုန့်ပြန်အချိန်တိုးခြင်း - တစ်ကြိမ်အချက်အလက်များဖတ်ရှုခြင်းကြောင့် CPU နှင့်မှတ်ဉာဏ်ဖိအားပေးမှုသည်နောက်ကျစေနိုင်သည်။
ဆာဗာတည်ငြိမ်မှု၏သက်ရောက်မှု - အလွန်အမင်းကိစ္စရပ်များတွင်မှတ်ဥာဏ်လျှံခြင်းနှင့် Script အချိန်ကုန်များဖြစ်နိုင်သည်။
PHP ဗားရှင်း: 7.4
ဒေတာဘေ့စ: MySQL 8.0
Test Data Volume: 100,000, 100,000, 500,000 တန်း
ဟာ့ဒ်ဝဲ: 4 Core CPU, 8GB Memory
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "test_db");
$start = microtime(true);
$result = $mysqli->query("SELECT * FROM big_table");
$data = $result->fetch_all(MYSQLI_ASSOC);
$end = microtime(true);
echo "Rows fetched: " . count($data) . "\n";
echo "Time taken: " . ($end - $start) . " seconds\n";
?>
ဒေတာပမာဏ | အချိန် (စက္ကန့်) | မှတ်ဉာဏ်အသုံးပြုမှု (MB) | ပေြာဆို |
---|---|---|---|
10,000 | 0.15 | 30 | စွမ်းဆောင်ရည်ကောင်းသော |
100,000 | 1.8 | 280 | သိသိသာသာနှေးကွေး |
500,000 | 10.2 | 1400 | မြင့်မားသောမှတ်ဉာဏ်အန္တရာယ် |
စမ်းသပ်မှုရလဒ်များအရဒေတာပမာဏတိုးများလာသည်နှင့်အမျှတုန့်ပြန်မှုအချိန်နှင့်အချက်အလက်များအားမှတ်ဉာဏ်အသုံးပြုမှု () Fetch_all ၏မှတ်ဉာဏ်အသုံးပြုမှုသည် linearly သို့မဟုတ်အထက်ပိုမိုမြင့်မားလာသည်ကိုတွေ့မြင်နိုင်သည်။ ဒေတာ 500,000 ကိုထုတ်ယူသောအခါဆာဗာသည်အလွန်ဖိအားပေးမှုအောက်တွင်ရှိပြီးနောက်ကျမှုအန္တရာယ်ရှိနိုင်သည်။
တစ်ချိန်တည်းတွင်ကြီးမားသောဒေတာများကိုမဖတ်ပါနှင့် Massive Data အတွက်အသုတ်သို့မဟုတ်လုပ်ငန်းစဉ်အားအတန်းဖြင့်ဖတ်ရန်အကြံပြုသည်။ ဥပမာအားဖြင့်, fetch_assoc () ကွင်းဆက်ကိုတစ် ဦး ချင်းစီရယူရန်သုံးပါ။
<?php
$result = $mysqli->query("SELECT * FROM big_table");
while ($row = $result->fetch_assoc()) {
// လိုင်းအားဖြင့်ထုတ်ယူခြင်းလိုင်း
}
?>
Pagination query ကိုသုံးပါ တစ်ခုတည်းတောင်းဆိုမှု၏ဖိအားကိုလျှော့ချရန် SQL ၏ ကန့်သတ်ချက် နှင့် offset မှအချက်အလက်များရှာဖွေခြင်းဒေတာကိုရှာဖွေခြင်းအချက်အလက်များကိုရှာဖွေခြင်း။
အချက်အလက်ဖွဲ့စည်းပုံ၏အကျိုးသင့်အကြောင်းသင့်ရှိသောဒီဇိုင်း အချည်းနှီးသောနယ်ပယ်များကိုလျှော့ချပြီးအလွန်မလိုအပ်သောအချက်အလက်များထုတ်လွှင့်မှုကိုရှောင်ပါ။
MySQL cache ကိုဖွင့်ပြီး query statembs <br> ဒေတာဘေ့စ်အဆင့်တွင်တုန့်ပြန်မှုစွမ်းဆောင်ရည်ကိုတိုးတက်အောင်လုပ်ပါ။
mysqli_result :: fetch_all သည် အသေးစားနှင့်အလတ်စားအချက်အလက်များအတွက်အလွန်ကောင်းမွန်စွာလုပ်ဆောင်သည်။ ဖွံ့ဖြိုးရန်လွယ်ကူသည်။ သို့သော်ကြီးမားသောအချက်အလက်ပမာဏနှင့်ရင်ဆိုင်ရသောအခါမှတ်ဉာဏ်နှင့်အချိန် overhead သည်သိသာထင်ရှားပြီးနောက်ကျကျန်နေနိုင်သည်။ လက်တွေ့ကျသောအပလီကေးရှင်းများတွင်အချက်အလက်ပမာဏအပေါ် အခြေခံ. အချက်အလက်ရယူသည့်နည်းလမ်းကို အခြေခံ. အချက်အလက်ရယူခြင်းနည်းလမ်းကိုရွေးချယ်ရန်,
ဤအမှန်တကယ်ခွဲခြမ်းစိတ်ဖြာခြင်းသည် Fetch_all ၏စွမ်းဆောင်ရည်ဝိသေသလက္ခဏာများကိုပိုမိုနားလည်ရန်နှင့်သင့်တော်သောဒေတာဘေ့စ်စာဖတ်ခြင်းအစီအစဉ်ကိုပိုမိုနားလည်ရန်ကူညီနိုင်သည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။ PHP နှင့်ဒေတာဘေ့စ်၏စွမ်းဆောင်ရည်အကောင်းမြင်ခြင်းနှင့်ပတ်သက်သောအသိပညာပိုမိုသိရှိလိုပါကတရားဝင်စာရွက်စာတမ်းများနှင့်လူထု၏အကောင်းဆုံးအလေ့အကျင့်များကိုကြည့်ပါ။