সারণি সারি গণনা করুন


165

সারণীতে রেকর্ডের গণনা পুনরুদ্ধার করতে মাইএসকিউএল আদেশটি কী?

উত্তর:


236
SELECT COUNT(*) FROM fooTable;

সারণীতে সারিগুলির সংখ্যা গণনা করবে।

দেখুন সহায়িকা


7
আমি যখন * এর পরিবর্তে ইনডেক্সড কলামের নাম ব্যবহার করি তখন কি আরও দ্রুত হয়? এটি পছন্দ করুন: নির্বাচন করুন COUNT (আইডি) FROMtablename

1
শুধুমাত্র সামান্য. আমি একটি 21961904 সারি টেবিল পেয়েছি যা তার COUNT টি 115 সেকেন্ডে জিজ্ঞাসা করেছিল, ID ব্যবহার করার সময় 107 সেকেন্ড সময় নেয়।
বন্ডলিন

2
COUNT (*) একটি কঠোর ভাষার সংজ্ঞা। আপনি COUNT (*) স্পেসটি নোট করার চেষ্টা করলে পার্স ত্রুটি পাবেন
ppostma1

9
আপনি এটি করতে পারেন COUNT(1), এটি দ্রুততম উপায়।
শোটা পাপিয়াশভিলি

পিএইচপি-তে পরিবর্তনশীল লেখার জন্য COUNT () ব্যবহার করার সর্বোত্তম উপায় কী? এসকিউএল-এ কি আমি "... COUNT (*) এ্যাসউইউকাউন্ট ..." করি, এটি কি $ ফলাফল-> নাম_আরো ব্যবহার করে, বা এই ফলাফলটিকে সরাসরি কল করার কোনও উপায় আছে?
নোসাজিমিকি

71

কারণ এটির কথা কেউ উল্লেখ করেনি:

show table status;

প্রতিটি টেবিলের জন্য আনুমানিক সারি সহ কিছু অতিরিক্ত তথ্যের সাথে সমস্ত সারণী তালিকাবদ্ধ করে। এটিই phpMyAdmin তার ডাটাবেস পৃষ্ঠার জন্য ব্যবহার করছে।

এই তথ্যটি মাইএসকিউএল 4 এ উপলব্ধ, সম্ভবত মাইএসকিউএল 3.23 এ রয়েছে - দীর্ঘ সময়ের পূর্বের তথ্য স্কিমা ডাটাবেস।

হালনাগাদ:

ডাউন-ভোট ছিল বলে, আমি স্পষ্ট করে বলতে চাই যে প্রদর্শিত নম্বরটি ইনোডিবি এবং টোকুডিবির জন্য অনুমান করা হয়েছে এবং এটি মাইএসএএম এবং আরিয়া (মারিয়া) স্টোরেজ ইঞ্জিনগুলির জন্য একেবারে সঠিক।

ডকুমেন্টেশন প্রতি :

সারি সংখ্যা। কিছু স্টোরেজ ইঞ্জিন যেমন মাইআইএসএএম, সঠিক গণনা সঞ্চয় করে। অন্যান্য স্টোরেজ ইঞ্জিনগুলির জন্য যেমন ইনোডিবি, এই মানটি একটি আনুমানিক হয় এবং আসল মান থেকে 40% থেকে 50% পর্যন্ত পরিবর্তিত হতে পারে। এই জাতীয় ক্ষেত্রে, একটি সঠিক গণনা পেতে নির্বাচন নির্বাচন করুন (*)।

এটি মাইএসকিউএল-এ সারি গণনা দেখার দ্রুততম উপায়, কারণ কোয়েরির মতো:

select count(*) from table;

সম্পূর্ণ টেবিল স্ক্যান করা যা খুব ব্যয়বহুল অপারেশন হতে পারে যা বড় উচ্চ লোড সার্ভারে কয়েক ঘন্টা সময় নিতে পারে। এটি ডিস্ক I / O বৃদ্ধি করে।

একই ক্রিয়াকলাপটি সন্নিবেশ এবং আপডেটের জন্য টেবিলটিকে ব্লক করতে পারে - এটি কেবল বিদেশী স্টোরেজ ইঞ্জিনগুলিতে ঘটে।

InnoDB এবং TokuDB টেবিল লক সহ ঠিক আছে, তবে পূর্ণ টেবিল স্ক্যান প্রয়োজন।


3
এটি সারিগুলি গণনা করার সবচেয়ে কার্যকরী উপায় বলে মনে হচ্ছে। আমি ভাবছি কেন এর উত্তর নেই? আমি ইনোডিবি ব্যবহার করছি। টেবিল লক সহ, সারিগুলির সংখ্যাটি ঠিক ঠিক হওয়া উচিত?
চুং লুন ইউয়েন

InnoDB জন্য রয়েছে আনুমানিক । তবে আপনি কিছু ক্ষেত্রে এটি ব্যবহার করতে পারেন "আমাদের ওয়েবসাইটে এক্সএক্সএক্সএক্স সদস্য রয়েছে", "আমরা এক্সএক্সএক্স ফলাফলগুলি আপনার অনুরূপ শনাক্ত করেছি" ইত্যাদি।
নিক 14

আমি নিশ্চিত না. তবে ইনোডবের পক্ষে আসল গণনা নয়। তবে মিলিয়ন সারি টেবিলের জন্য বেশ কার্যকর।
নিক 1

4
সারি গণনা পেতে প্রতিটি সারি গণনা করতে টেবিলগুলির মধ্য দিয়ে যাওয়া বরং হাস্যকর। সুতরাং আমি এই উত্তরটিও পছন্দ করি।
th3penguinWisperer

35

Table টেবিলটিতে কোনও selectকোয়েরি না চালিয়ে একটি সারণীতে সারিগুলির সংখ্যা বের করার আমাদের অন্য উপায় রয়েছে have

প্রতিটি মাইএসকিউএল ইনস্ট্যান্সে তথ্য_স্কেমা ডাটাবেস থাকে। আপনি যদি নিম্নলিখিত জিজ্ঞাসাটি চালনা করেন তবে এটি সারণিতে সারিগুলির আনুমানিক সংখ্যা সহ টেবিল সম্পর্কে সম্পূর্ণ বিবরণ দেবে ।

select * from information_schema.TABLES where table_name = 'table_name'\G

মাইআইএসএএম সারি সংখ্যা সঞ্চিত করায় এটি কি কোনও মাইআইএসএএম টেবিলে দ্রুততর?
NaturalBornCamper

আমি মাইআইএসএএম-তে এটি পরীক্ষা করিনি।
সন্তোষ টাঙ্গুডু



3

শুধু একটি

SELECT COUNT(*) FROM table;

আপনি তার পরে যেখানে সেখানে শর্তগুলি নির্দিষ্ট করতে পারেন can

SELECT COUNT(*) FROM table WHERE eye_color='brown';

3

যদি আপনার টেবিলের বেশ কয়েকটি ক্ষেত্র থাকে এবং আপনার টেবিলটি বিশাল হয় তবে এটি ব্যবহার করবেন না * কারণ এটি সমস্ত ক্ষেত্রকে মেমরিতে লোড করে এবং নীচের ব্যবহারের সাথে আরও ভাল পারফরম্যান্স হবে

SELECT COUNT(1) FROM fooTable;

এটি ভুল। দেখুন stackoverflow.com/questions/5179969/... COUNT টি (1) আসলে অনেক MyISAM জন্যই ধীরে হতে পারে।
jcoffland

@ জেকোফল্যান্ড আপনি নিজেরাই চেষ্টা করতে পারেন, বিশেষত আপনার যখন যোগ দেওয়া হয় বা অবস্থা যেখানে গণনা (*) এর চেয়ে অনেক দ্রুত হয়ে যায়।
ইউসেফারি

2

সন্তোষ দ্বারা উল্লিখিত হিসাবে , আমি মনে করি এই কোয়েরিটি যথেষ্ট দ্রুত, সমস্ত টেবিলে জিজ্ঞাসাবাদ করার সময় নয়।

নির্দিষ্ট ডাটাবেসে একটি নির্দিষ্ট টেবিল নামের জন্য, ডেটা রেকর্ডের সংখ্যার পূর্ণসংখ্যার ফলাফলটি প্রদান করতে :

select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database' 
AND table_name='tablename';

1
এটি একটি আনুমানিক সংখ্যক সারি ফিরতে পারে। একটি উদাহরণে, আমি COUNT (*) ব্যবহার করে 55,940,343 সারি পেয়েছি তবে এই পদ্ধতিটি ব্যবহার করে 56,163,339 পেয়েছি সুতরাং এটি 200k এর বেশি দ্বারা বন্ধ ছিল।
jcoffland

@jcoffland, আমি: _ Santosh_ যার উপরে যুক্তরাষ্ট্রের ফল দ্বারা উত্তর উল্লিখিত আনুমানিক । আমার উত্তরটি আরও বিশদ ব্যবহারিক ক্যোয়ারী। যদি আপনি count(*)পারফরম্যান্স সচেতনতার সাথে নির্ভুল গণনা ব্যবহার করতে চান তবে উত্তরগুলিতে এটি বেশ স্পষ্ট
মোহাম্মদ কানান

1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;
$total = 0;
$sqls = mysql_query($sql,$conn);
if ( $sqls ) {
    $total = mysql_result($sqls, 0);
};
echo "Total:".$total;`

এই উত্তরটি পুরানো হয়েছে, পিএইচপি 5.5.0 এ মাইএসকিএল_সাল্টকে অবমূল্যায়ন করা হয়েছে এবং পিএইচপি 7.0.0-এ সরানো হয়েছে
এই পৃথিবীকে আরও ভাল জায়গা করুন

1

আপনাকে গণনা ব্যবহার করতে হবে () নির্দিষ্ট মানদণ্ডের সাথে মেলে এমন সারিগুলির সংখ্যা প্রদান করে

select count(*) from table_name;

0

আপনার যদি প্রাথমিক কী বা একটি অনন্য কী / সূচক থাকে তবে দ্রুত পদ্ধতিটি সম্ভব (4 মিলিয়ন সারি টেবিল দিয়ে পরীক্ষিত)

SHOW INDEXES FROM "database.tablename" WHERE Key_Name=\"PRIMARY\"

এবং তারপরে কার্ডিনালিটির ক্ষেত্রটি পান (এটি তাত্ক্ষণিকের নিকটে)

টাইমস যেখানে 0.4 সে থেকে 0.0001 মিমি অবধি

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