কেন গণনা (*) ধীর হয়, যখন ব্যাখ্যা উত্তর জানে?


14

এই ক্যোয়ারী: select count(*) from planner_eventদৌড়াতে খুব দীর্ঘ সময় লাগে - এত দীর্ঘ, আমি এটি শেষ হওয়ার আগেই ছেড়ে দিয়েছিলাম। যাইহোক, আমি যখন রান করি তখন আমি explain select count(*) from planner_eventআউটপুটে সারিগুলির সংখ্যা (14 মি) সহ একটি কলাম দেখতে পাই।

কীভাবে ব্যাখ্যা আসুন তাৎক্ষণিকভাবে সারিগুলির সংখ্যা পেতে পারে, তবে গণনা (*) চালাতে বেশ দীর্ঘ সময় নেয়?


COUNT (*) কারণ ছাড়াই InnoDB ইঞ্জিনে একটি টেবিল স্ক্যানের কারণ ঘটবে .. MyISAM সরাসরি গণনা ডেলিভারি করতে পারে কারণ COUNT টেবিলের বাইরে ডি হেডার ফাইলটি রাখা আছে।
রেমন্ড নিজল্যান্ড

উত্তর:


16

পূর্বে জড়ো হওয়া পরিসংখ্যান (ক্যোরি অপ্টিমাইজার দ্বারা ব্যবহৃত) ব্যবহার করুন ব্যাখ্যা করুন। রিডিং করে select count(*)প্রতিটি ডেটা ব্লক।

আনুমানিক সারি গণনা পাওয়ার জন্য এখানে সস্তা উপায়:

select TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME='planner_event';

এমনকি যদি আপনি select count(id)এটি করেন তবে এটি এখনও খুব দীর্ঘ সময় নিতে পারে, যদি না আপনার কাছে গৌণ সূচক থাকে id(তবে ধরে idনিও যে এটি একটি প্রাথমিক কী)। যেহেতু সমস্ত ডেটা (সারি ডেটা সহ) বি-ট্রি সূচকগুলিতে সঞ্চিত রয়েছে, একটি সম্পাদন select count(PK_COLUMN)করা এখনও আইওর পরিমাণে যথেষ্ট পরিমাণে রয়েছে (সমস্ত ডেটা পৃষ্ঠা পড়তে হবে)। পিকে ক্ষেত্রে যদি আপনার গৌণ সূচক থাকে তবে এটি একটি গণনা সম্পাদনের জন্য কম আইও করতে সক্ষম হবে।


I_S.TABLES আপনি একই দেয় অনুমান যে EXPLAINআপনি দেয়।
রিক জেমস

ক্যোয়ারী অনুপস্থিত AND TABLE_SCHEMA='my_database', অন্যথায় আপনি যদি অন্য ডেটাবেজে একই নামের একটি টেবিল থাকে তবে আপনি একাধিক ফলাফল ফিরে পাবেন।
সিজেড

3

অপ্টিমাইজারের জন্য জিনিসগুলি অনুমান করার জন্য ব্যবহৃত হয় এমন কিছু "পরিসংখ্যান" থেকে নম্বরটি ব্যাখ্যা করুন। এই সংখ্যাটি সঠিক থেকে দূরে থাকতে পারে - আমি কখনও কখনও দেখতে পাই যে এটি সঠিক মানের চেয়ে 2 (উচ্চতর বা নিম্ন) গুণকের চেয়ে বেশি।

COUNT(*)অন্য কোনও সংযোগ দ্বারা সন্নিবেশ / মুছে ফেলাতে ব্যস্ত হলেও এখনও "প্রতিশ্রুতিবদ্ধ" নয় এমন ভুল রেকর্ডিং এড়াতে একটি ইনোডিবি টেবিলে সম্পাদন করতে অবশ্যই টেবিলটি স্ক্যান করতে হবে। আসলে, কিছু সূচকে পুরো স্ক্যান করা যথেষ্ট ভাল, অগত্যা পুরো টেবিলটি (যা এতে রয়েছে PRIMARY KEY)।

আপনার কত র‌্যাম আছে? এর মান কী innodb_buffer_pool_size? এটি যদি র্যামের প্রায় 70% হত তবে এটি সহায়তা করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.