আপনি যখন COUNT(*)এটি গণনা কলাম সূচিতে নিয়ে যান, তাই এটি সেরা ফলাফল হবে। মাইআইএসএএম ইঞ্জিন সহ মাইএসকিএল আসলে সারি গণনা সংরক্ষণ করে, আপনি যখনই সমস্ত সারি গণনা করার চেষ্টা করবেন তখন এটি সমস্ত সারি গণনা করে না। (প্রাথমিক কী এর কলামের উপর ভিত্তি করে)
সারিগুলি গণনা করতে পিএইচপি ব্যবহার করা খুব স্মার্ট নয়, কারণ আপনাকে পিএইচপি থেকে mysql থেকে ডেটা প্রেরণ করতে হবে। আপনি যখন মাইএসকিএল পক্ষের ক্ষেত্রে এটি অর্জন করতে পারেন তবে কেন এটি করবেন?
যদি COUNT(*)ধীর গতি EXPLAINহয় তবে আপনার ক্যোয়ারিতে চালানো উচিত এবং সূচীগুলি সত্যই ব্যবহৃত হয়েছে কিনা এবং সেগুলি কোথায় যুক্ত করা উচিত তা পরীক্ষা করা উচিত।
নিম্নলিখিতটি দ্রুততম উপায় নয়, তবে একটি কেস রয়েছে, যেখানে COUNT(*)সত্যিই ফিট হয় না - যখন আপনি ফলাফলগুলি গোষ্ঠীকরণ শুরু করেন, আপনি সমস্যার মধ্যে পড়ে যেতে পারেন, যেখানে COUNTসত্যই সমস্ত সারি গণনা করা হয় না।
সমাধানটি হ'ল SQL_CALC_FOUND_ROWS। এটি সাধারণত ব্যবহৃত হয় যখন আপনি সারিগুলি নির্বাচন করছেন তবে এখনও মোট সারির গণনাটি জানতে হবে (উদাহরণস্বরূপ, পেজিংয়ের জন্য)। আপনি যখন ডাটা সারিগুলি নির্বাচন করেন, কেবল SQL_CALC_FOUND_ROWSনির্বাচনের পরে কীওয়ার্ডটি যুক্ত করুন:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
আপনি প্রয়োজনীয় সারিগুলি নির্বাচন করার পরে, আপনি এই একক ক্যোয়ারির সাথে গণনাটি পেতে পারেন:
SELECT FOUND_ROWS();
FOUND_ROWS() ডেটা বাছাইয়ের প্রশ্নের পরে অবিলম্বে ফোন করতে হবে।
উপসংহারে, সমস্ত কিছুই আসলে আপনার কয়টি এন্ট্রি রয়েছে এবং WHERE বিবৃতিতে রয়েছে তা নেমে আসে। প্রচুর সারি রয়েছে (যখন কয়েক হাজার, লক্ষ লক্ষ এবং তার বেশি) তখন সূচাগুলি কীভাবে ব্যবহৃত হচ্ছে সেদিকে আপনার সত্যই মনোযোগ দেওয়া উচিত।
SELECT 1এবংSELECT *। পার্থক্য আছে কি?