products
မွာ Rows ၃ ေသာင္းရွိတာ available
မွာ true
က ၃ ေသာင္းေက်ာ္တယ္ branch_id
မွာ 72
နဲ႔ကလည္း ၃ ေသာင္းနီးနီးဆိုေတာ့ အဲဒီ့ Table မွာေတာ့ ဘာမွလုပ္လို႔မရဘူး Table Scan ပဲသြားမွာပဲ ဒါေပမယ့္ ေနာင္ကို branch_id
ေတြ တိုးလာႏိုင္ရင္ေတာ့ branch_id
မွာ Index တခု Create လုပ္ထားပါ အခုကေတာ့ ရွိရွိမရွိရွိ ဘာမွမထူးပါဘူး။
product_category
အတြက္ကေတာ့ စုစုေပါင္း Rows ၁ သိန္း ၁ ေသာင္းခြဲမွာ category_id
မွာ 1
ဆိုတာက ၂ ေသာင္းခြဲေလာက္ပဲဆိုေတာ့ အဲဒါကေတာ့ နည္းနည္းျမန္ေအာင္လို႔ လုပ္ယူလို႔ျဖစ္ႏိုင္မယ္ product_id
နဲ႔ category_id
ဆိုတဲ့ column ၂ ခုေပၚမွာ Index ၁ ခုစီ Create လုပ္ပါ။ product_category
မွာ id
ဆိုၿပီး ေနာက္ထပ္တခုေတြ႔တယ္ အဲဒါက ဘာအတြက္ သံုးၿပီးေနမွန္းမသိလို႔ အႀကံမေပးခဲ့ဘူး တကယ္ကေတာ့ အဲဒါရွိစရာမလိုဘူး composite key အျဖစ္ဆိုရင္ အဆင္ေျပတယ္။
Query ကေတာ့ Index ေတြရွိတယ္ဆိုရင္ ျပန္စမ္းၾကည့္ၿပီးေတာ့ အေျခအေနျပန္ၾကည့္ပါ။ အဲဒါမွ နည္းနည္းေႏွးရင္ေတာ့ Analyzer ကို ကိုယ္တိုင္ပဲဆံုးျဖတ္ၿပီး ေအာက္မွာျပထားတဲ့ Query ကို စမ္းၾကည့္ပါ။
SELECT * FROM products WHERE branch_id=72 AND available = 1 AND id IN (SELECT product_id FROM product_category WHERE category_id=1)
Total အတြက္ က Table ၂ ခုကို Join စရာမလိုဘူး product_category
ထဲမွာ category_id=1
ဆိုတဲ့ အေရအတြက္နဲ႔ Data ေတြဟာ စနစ္တက်ရွိတယ္ဆိုရင္ တူရလိမ့္မယ္ အဲဒီေတာ့ product_category
ထဲက category_id=1
ကုိပဲ Count လုပ္ပါ
SELECT count(*) as Total FROM product_category WHERE category_id=1
Query ေတြက အနည္းနဲ႔အမ်ား မွားရင္ေတာ့ ျပင္ေရးပါ မေရးတာလည္းၾကာေတာ့ စမ္းေပးစရာလည္း စက္ထဲမွာဘာမွမရွိဘူး မွားခ်င္မွားလိမ့္မယ္