MySQL သံုးတဲ႔ သူမ်ားအတြက္ ဒီေန႔မွ သိလိုက္တဲ႔ function ေလးတစ္ခု ကို မွ်ေ၀ခ်င္ပါတယ္။
ဆိုၾကပါစို႔။ pagination ေတြသံုးမယ္ဆိုရင္ အရင္က query ႏွစ္ခု သံုးခဲ႔ၾကတယ္။
တစ္ခုက pagination ရဲ႕ current page မွာ ျပရမယ့္ data ေတြကို ဆြဲယူဖို႔။
ေနာက္တစ္ခုက pagination ၇ဲ႕ page number ေလးေတြေဖာ္ျပဖို႔ total row ကို သိရန္ ဆြဲယူၾကပါတယ္။
ဒါဆိုရင္ data အတြက္ တစ္ခါ ဆြဲတဲ႔အခ်ိန္ရယ္။ total row ကို ရွာတဲ႔အခ်ိန္ရယ္ ႏွစ္ခါ ေပးရသလို data base server အတြက္လည္း loading ႏွစ္ခါ တက္ေစပါတယ္။
အခု ဒီfunction ေလးကို သံုးလိုက္ပါ။ ဒါဆို total row ကို ရွာတဲ႔ အခ်ိန္ နဲ႔ loading ကို သက္သာသြားပါလိမ္႔မယ္။
more effective way လို႔ေျပာရမွာေပါ႔။
================================================
8/8/2016(updating)
ဒီပို႔ကိုေရးတုန္းက ပိုျမန္မယ္အထင္နဲ႔ ေရးခဲ႔တာပါ။ ေနာက္မွ ဖတ္ၾကည့္ေတာ႔ တခ်ိဳ႕က count(*) နဲ႔ သံုးတာကို ပိုျမန္တယ္လို႔ ေရးထားတာေတြလဲ ဖတ္ရပါတယ္။
php framework အမ်ားစုရဲ႕ paginate class ေတြကလည္း SELECT count(*) FROM table
ပံုစံုမ်ိဳးပဲသံုးၾကတာေတြရပါတယ္။
ႏွစ္ခုရဲ႕ comparison ကိုေတာ႔ လိုက္ဖတ္ေပးမယ့္ အေသးစိတ္အခုထိ မသိေသးလို႔ မေရးႏိုင္ေသးပါဘူး။
တစ္ခ်ိဳ႕ blog ေတြမွာေရးထားတာကေတာ႔ သူတုိ႔ application မွာ အခု post မွာျပထားတဲ႔ အတိုင္း FOUND_ROWS() ပုံစံ သံုးထားတယ္။ဒါေပမယ့္ အရမ္းေႏွးလို႔ count(*) ေျပာင္းသံုးတာ သိသိသာသာ ပို ျမန္လာတယ္လို႔ေရးထားတာပါတယ္။
ပံုမွန္မွာေတာ႔ count(*) ကပိုၾကာရမွာပါ။ ဒါေပမယ့္ database ၇ဲ႔ caching feature ေၾကာင့္ ပိုျမန္လာတယ္လုိ႔ ဆိုပါတယ္။
ဒါေၾကာင့္ count(*) ကို ပဲဆက္သံုးျပီး FOUND_ROW() ပံုစံအသံုးျပဳမႈကိုေတာ႔ ဗဟုသုတအျဖစ္ပဲမွတ္ထားလိုက္ပါ။
================================================
ဥပမာ။ ။
Data ေတြဆြဲယူဖို႔
SELECT SQL_CALC_FOUND_ROWS * FROM table_name WHERE ........ LIMIT 5,10;
ျပီးရင္ total row အတြက္ကလြယ္လြယ္ပဲ
SELECT FOUND_ROW( );
ဒါဆိုရင္ အခု query က total row ကိုထုတ္ေပးမွာျဖစ္ပါတယ္။
အတိအက်အားျဖင့္ ဒုတိယ query ရဲ႕ FOUND_ROW() function က ပထမ query ကို limit ျဖဳတ္လို႔ ရလာတဲ႔ total row ကို ထုတ္ေပးျခင္းျဖစ္ပါတယ္။
အသံုး၀င္မယ္လို႔ထင္ပါတယ္။

EmoticonEmoticon